diff options
author | Ron Yorston <rmy@pobox.com> | 2020-06-12 16:35:24 +0100 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2020-06-12 16:35:24 +0100 |
commit | b1a5034ca852efe2c24212db77d7b0b2660a687b (patch) | |
tree | 4d01540fba4bd2dab3506714dd457b226d006827 | |
parent | 32833bc06873f83c786232617b4390b60252c417 (diff) | |
download | busybox-w32-b1a5034ca852efe2c24212db77d7b0b2660a687b.tar.gz busybox-w32-b1a5034ca852efe2c24212db77d7b0b2660a687b.tar.bz2 busybox-w32-b1a5034ca852efe2c24212db77d7b0b2660a687b.zip |
win32: minor improvements to process spawning
The function mingw_spawn_forkshell() was introduced to handle
spawning a forkshell process. Since we know that:
- the binary being executed doesn't meet any of the special cases
handled by spawnveq()
- the arguments don't require quoting
we can call spawnve() directly instead of spawnveq().
Also, use xzalloc() to allocate new_argv so we don't need to set
the final NULL pointer explicitly.
-rw-r--r-- | win32/process.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/win32/process.c b/win32/process.c index 54628acad..f3d0a09f8 100644 --- a/win32/process.c +++ b/win32/process.c | |||
@@ -241,10 +241,9 @@ spawnveq(int mode, const char *path, char *const *argv, char *const *env) | |||
241 | } | 241 | } |
242 | 242 | ||
243 | argc = string_array_len((char **)argv); | 243 | argc = string_array_len((char **)argv); |
244 | new_argv = xmalloc(sizeof(*argv)*(argc+1)); | 244 | new_argv = xzalloc(sizeof(*argv)*(argc+1)); |
245 | for (i = 0;i < argc;i++) | 245 | for (i = 0;i < argc;i++) |
246 | new_argv[i] = quote_arg(argv[i]); | 246 | new_argv[i] = quote_arg(argv[i]); |
247 | new_argv[argc] = NULL; | ||
248 | 247 | ||
249 | /* Special case: spawnve won't execute a batch file if the first | 248 | /* Special case: spawnve won't execute a batch file if the first |
250 | * argument is a relative path containing forward slashes. Absolute | 249 | * argument is a relative path containing forward slashes. Absolute |
@@ -395,7 +394,7 @@ mingw_spawn_proc(const char **argv) | |||
395 | intptr_t FAST_FUNC | 394 | intptr_t FAST_FUNC |
396 | mingw_spawn_forkshell(const char **argv) | 395 | mingw_spawn_forkshell(const char **argv) |
397 | { | 396 | { |
398 | return spawnveq(P_NOWAIT, bb_busybox_exec_path, (char *const *)argv, | 397 | return spawnve(P_NOWAIT, bb_busybox_exec_path, (char *const *)argv, |
399 | environ); | 398 | environ); |
400 | } | 399 | } |
401 | #endif | 400 | #endif |