aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2017-08-29 21:57:08 +0100
committerRon Yorston <rmy@pobox.com>2017-08-30 17:17:14 +0100
commit8731aec88d8efced67084446dea459bfcc3af1aa (patch)
treeea54f8432123cc4acdbe8f7da69631e7a1f72cb9
parent8cd264102aa2d954be9bbdbf84d3f4ab75189904 (diff)
downloadbusybox-w32-8731aec88d8efced67084446dea459bfcc3af1aa.tar.gz
busybox-w32-8731aec88d8efced67084446dea459bfcc3af1aa.tar.bz2
busybox-w32-8731aec88d8efced67084446dea459bfcc3af1aa.zip
win32: further minor code shrink
Remove the check for argv being NULL in spawnveq. It shouldn't ever succeed.
-rw-r--r--win32/process.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/win32/process.c b/win32/process.c
index 07c2e49df..192eeab56 100644
--- a/win32/process.c
+++ b/win32/process.c
@@ -192,27 +192,24 @@ static intptr_t
192spawnveq(int mode, const char *path, char *const *argv, char *const *env) 192spawnveq(int mode, const char *path, char *const *argv, char *const *env)
193{ 193{
194 char **new_argv; 194 char **new_argv;
195 int i, argc = 0; 195 int i, argc = -1;
196 intptr_t ret; 196 intptr_t ret;
197 197
198 if (!argv) { 198 while (argv[++argc])
199 char *const empty_argv[] = { (char *)path, NULL }; 199 ;
200 return spawnve(mode, path, empty_argv, env);
201 }
202
203 200
204 while (argv[argc]) 201 new_argv = xmalloc(sizeof(*argv)*(argc+1));
205 argc++;
206
207 new_argv = malloc(sizeof(*argv)*(argc+1));
208 for (i = 0;i < argc;i++) 202 for (i = 0;i < argc;i++)
209 new_argv[i] = quote_arg(argv[i]); 203 new_argv[i] = quote_arg(argv[i]);
210 new_argv[argc] = NULL; 204 new_argv[argc] = NULL;
205
211 ret = spawnve(mode, path, new_argv, env); 206 ret = spawnve(mode, path, new_argv, env);
207
212 for (i = 0;i < argc;i++) 208 for (i = 0;i < argc;i++)
213 if (new_argv[i] != argv[i]) 209 if (new_argv[i] != argv[i])
214 free(new_argv[i]); 210 free(new_argv[i]);
215 free(new_argv); 211 free(new_argv);
212
216 return ret; 213 return ret;
217} 214}
218 215
@@ -234,15 +231,15 @@ mingw_spawn_interpreter(int mode, const char *prog, char *const *argv, char *con
234 char *int_name, *opts; 231 char *int_name, *opts;
235 char *int_path = parse_interpreter(prog, &int_name, &opts); 232 char *int_path = parse_interpreter(prog, &int_name, &opts);
236 char **new_argv; 233 char **new_argv;
237 int argc = 0; 234 int argc = -1;
238 char *fullpath = NULL; 235 char *fullpath = NULL;
239 236
240 if (!int_path) 237 if (!int_path)
241 return spawnveq(mode, prog, argv, envp); 238 return spawnveq(mode, prog, argv, envp);
242 239
243 nopts = opts != NULL; 240 nopts = opts != NULL;
244 while (argv[argc]) 241 while (argv[++argc])
245 argc++; 242 ;
246 243
247 new_argv = xmalloc(sizeof(*argv)*(argc+nopts+2)); 244 new_argv = xmalloc(sizeof(*argv)*(argc+nopts+2));
248 new_argv[1] = opts; 245 new_argv[1] = opts;
@@ -325,10 +322,7 @@ mingw_execvp(const char *cmd, char *const *argv)
325int 322int
326mingw_execve(const char *cmd, char *const *argv, char *const *envp) 323mingw_execve(const char *cmd, char *const *argv, char *const *envp)
327{ 324{
328 int ret; 325 int ret = (int)mingw_spawn_interpreter(P_WAIT, cmd, argv, envp);
329 int mode = P_WAIT;
330
331 ret = (int)mingw_spawn_interpreter(mode, cmd, argv, envp);
332 if (ret != -1) 326 if (ret != -1)
333 exit(ret); 327 exit(ret);
334 return ret; 328 return ret;