aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2020-06-12 16:35:24 +0100
committerRon Yorston <rmy@pobox.com>2020-06-12 16:35:24 +0100
commitb1a5034ca852efe2c24212db77d7b0b2660a687b (patch)
tree4d01540fba4bd2dab3506714dd457b226d006827
parent32833bc06873f83c786232617b4390b60252c417 (diff)
downloadbusybox-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.c5
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)
395intptr_t FAST_FUNC 394intptr_t FAST_FUNC
396mingw_spawn_forkshell(const char **argv) 395mingw_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