diff options
author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2017-06-27 16:31:36 +0200 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2017-08-23 12:29:25 +0100 |
commit | 230944a8f7b03d2b27dd65e2649f2067c31c65ed (patch) | |
tree | d31b2df254b831994b2a2edf70141982f03a4446 | |
parent | d4dc5e4177056ae284c256278a853f51e347f13f (diff) | |
download | busybox-w32-230944a8f7b03d2b27dd65e2649f2067c31c65ed.tar.gz busybox-w32-230944a8f7b03d2b27dd65e2649f2067c31c65ed.tar.bz2 busybox-w32-230944a8f7b03d2b27dd65e2649f2067c31c65ed.zip |
win32/mingw: fix signatures of the *execv*() family of functions
The function signatures were inherited from Git's source code, but are
inconsistent with the declarations in the POSIX standard.
This requires quite a few changes in quite a few callers, unfortunately.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Ron Yorston <rmy@pobox.com>
-rw-r--r-- | coreutils/timeout.c | 2 | ||||
-rw-r--r-- | include/mingw.h | 8 | ||||
-rw-r--r-- | win32/process.c | 38 | ||||
-rw-r--r-- | win32/system.c | 2 |
4 files changed, 24 insertions, 26 deletions
diff --git a/coreutils/timeout.c b/coreutils/timeout.c index 4cdde4366..68188b389 100644 --- a/coreutils/timeout.c +++ b/coreutils/timeout.c | |||
@@ -140,7 +140,7 @@ int timeout_main(int argc UNUSED_PARAM, char **argv) | |||
140 | if (argv[0] == NULL) | 140 | if (argv[0] == NULL) |
141 | bb_show_usage(); | 141 | bb_show_usage(); |
142 | 142 | ||
143 | if ((ret=mingw_spawn_proc(argv)) == -1) | 143 | if ((ret=mingw_spawn_proc((const char **)argv)) == -1) |
144 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | 144 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); |
145 | 145 | ||
146 | h = (HANDLE)ret; | 146 | h = (HANDLE)ret; |
diff --git a/include/mingw.h b/include/mingw.h index 05e0b20fc..65d32391f 100644 --- a/include/mingw.h +++ b/include/mingw.h | |||
@@ -456,10 +456,10 @@ DIR *mingw_opendir(const char *path); | |||
456 | #define PRIuMAX "I64u" | 456 | #define PRIuMAX "I64u" |
457 | 457 | ||
458 | pid_t FAST_FUNC mingw_spawn(char **argv); | 458 | pid_t FAST_FUNC mingw_spawn(char **argv); |
459 | intptr_t FAST_FUNC mingw_spawn_proc(char **argv); | 459 | intptr_t FAST_FUNC mingw_spawn_proc(const char **argv); |
460 | int mingw_execv(const char *cmd, const char *const *argv); | 460 | int mingw_execv(const char *cmd, char *const *argv); |
461 | int mingw_execvp(const char *cmd, const char *const *argv); | 461 | int mingw_execvp(const char *cmd, char *const *argv); |
462 | int mingw_execve(const char *cmd, const char *const *argv, const char *const *envp); | 462 | int mingw_execve(const char *cmd, char *const *argv, char *const *envp); |
463 | #define spawn mingw_spawn | 463 | #define spawn mingw_spawn |
464 | #define execvp mingw_execvp | 464 | #define execvp mingw_execvp |
465 | #define execve mingw_execve | 465 | #define execve mingw_execve |
diff --git a/win32/process.c b/win32/process.c index 968ea9afd..5eb52828b 100644 --- a/win32/process.c +++ b/win32/process.c | |||
@@ -208,14 +208,14 @@ quote_arg(const char *arg) | |||
208 | } | 208 | } |
209 | 209 | ||
210 | static intptr_t | 210 | static intptr_t |
211 | spawnveq(int mode, const char *path, const char *const *argv, const char *const *env) | 211 | spawnveq(int mode, const char *path, char *const *argv, char *const *env) |
212 | { | 212 | { |
213 | char **new_argv; | 213 | char **new_argv; |
214 | int i, argc = 0; | 214 | int i, argc = 0; |
215 | intptr_t ret; | 215 | intptr_t ret; |
216 | 216 | ||
217 | if (!argv) { | 217 | if (!argv) { |
218 | const char *empty_argv[] = { path, NULL }; | 218 | char *const empty_argv[] = { (char *)path, NULL }; |
219 | return spawnve(mode, path, empty_argv, env); | 219 | return spawnve(mode, path, empty_argv, env); |
220 | } | 220 | } |
221 | 221 | ||
@@ -227,7 +227,7 @@ spawnveq(int mode, const char *path, const char *const *argv, const char *const | |||
227 | for (i = 0;i < argc;i++) | 227 | for (i = 0;i < argc;i++) |
228 | new_argv[i] = quote_arg(argv[i]); | 228 | new_argv[i] = quote_arg(argv[i]); |
229 | new_argv[argc] = NULL; | 229 | new_argv[argc] = NULL; |
230 | ret = spawnve(mode, path, (const char *const *)new_argv, env); | 230 | ret = spawnve(mode, path, new_argv, env); |
231 | for (i = 0;i < argc;i++) | 231 | for (i = 0;i < argc;i++) |
232 | if (new_argv[i] != argv[i]) | 232 | if (new_argv[i] != argv[i]) |
233 | free(new_argv[i]); | 233 | free(new_argv[i]); |
@@ -238,21 +238,21 @@ spawnveq(int mode, const char *path, const char *const *argv, const char *const | |||
238 | #if ENABLE_FEATURE_PREFER_APPLETS || ENABLE_FEATURE_SH_STANDALONE | 238 | #if ENABLE_FEATURE_PREFER_APPLETS || ENABLE_FEATURE_SH_STANDALONE |
239 | static intptr_t | 239 | static intptr_t |
240 | mingw_spawn_applet(int mode, | 240 | mingw_spawn_applet(int mode, |
241 | const char *const *argv, | 241 | char *const *argv, |
242 | const char *const *envp) | 242 | char *const *envp) |
243 | { | 243 | { |
244 | return spawnveq(mode, bb_busybox_exec_path, argv, envp); | 244 | return spawnveq(mode, bb_busybox_exec_path, argv, envp); |
245 | } | 245 | } |
246 | #endif | 246 | #endif |
247 | 247 | ||
248 | static intptr_t | 248 | static intptr_t |
249 | mingw_spawn_interpreter(int mode, const char *prog, const char *const *argv, const char *const *envp) | 249 | mingw_spawn_interpreter(int mode, const char *prog, char *const *argv, char *const *envp) |
250 | { | 250 | { |
251 | intptr_t ret; | 251 | intptr_t ret; |
252 | char **opts; | 252 | char **opts; |
253 | int nopts; | 253 | int nopts; |
254 | const char *interpr = parse_interpreter(prog, &opts, &nopts); | 254 | const char *interpr = parse_interpreter(prog, &opts, &nopts); |
255 | const char **new_argv; | 255 | char **new_argv; |
256 | int argc = 0; | 256 | int argc = 0; |
257 | 257 | ||
258 | if (!interpr) | 258 | if (!interpr) |
@@ -264,11 +264,11 @@ mingw_spawn_interpreter(int mode, const char *prog, const char *const *argv, con | |||
264 | new_argv = malloc(sizeof(*argv)*(argc+nopts+2)); | 264 | new_argv = malloc(sizeof(*argv)*(argc+nopts+2)); |
265 | memcpy(new_argv+1, opts, sizeof(*opts)*nopts); | 265 | memcpy(new_argv+1, opts, sizeof(*opts)*nopts); |
266 | memcpy(new_argv+nopts+2, argv+1, sizeof(*argv)*argc); | 266 | memcpy(new_argv+nopts+2, argv+1, sizeof(*argv)*argc); |
267 | new_argv[nopts+1] = prog; /* pass absolute path */ | 267 | new_argv[nopts+1] = (char *)prog; /* pass absolute path */ |
268 | 268 | ||
269 | #if ENABLE_FEATURE_PREFER_APPLETS || ENABLE_FEATURE_SH_STANDALONE | 269 | #if ENABLE_FEATURE_PREFER_APPLETS || ENABLE_FEATURE_SH_STANDALONE |
270 | if (find_applet_by_name(interpr) >= 0) { | 270 | if (find_applet_by_name(interpr) >= 0) { |
271 | new_argv[0] = interpr; | 271 | new_argv[0] = (char *)interpr; |
272 | ret = mingw_spawn_applet(mode, new_argv, envp); | 272 | ret = mingw_spawn_applet(mode, new_argv, envp); |
273 | } else | 273 | } else |
274 | #endif | 274 | #endif |
@@ -292,7 +292,7 @@ mingw_spawn_interpreter(int mode, const char *prog, const char *const *argv, con | |||
292 | } | 292 | } |
293 | 293 | ||
294 | static intptr_t | 294 | static intptr_t |
295 | mingw_spawn_1(int mode, const char *cmd, const char *const *argv, const char *const *envp) | 295 | mingw_spawn_1(int mode, const char *cmd, char *const *argv, char *const *envp) |
296 | { | 296 | { |
297 | intptr_t ret; | 297 | intptr_t ret; |
298 | 298 | ||
@@ -331,30 +331,28 @@ mingw_spawn(char **argv) | |||
331 | { | 331 | { |
332 | intptr_t ret; | 332 | intptr_t ret; |
333 | 333 | ||
334 | ret = mingw_spawn_1(P_NOWAIT, argv[0], (const char *const *)argv, | 334 | ret = mingw_spawn_1(P_NOWAIT, argv[0], (char *const *)argv, environ); |
335 | (const char *const *)environ); | ||
336 | 335 | ||
337 | return ret == -1 ? -1 : GetProcessId((HANDLE)ret); | 336 | return ret == -1 ? -1 : GetProcessId((HANDLE)ret); |
338 | } | 337 | } |
339 | 338 | ||
340 | intptr_t FAST_FUNC | 339 | intptr_t FAST_FUNC |
341 | mingw_spawn_proc(char **argv) | 340 | mingw_spawn_proc(const char **argv) |
342 | { | 341 | { |
343 | return mingw_spawn_1(P_NOWAIT, argv[0], (const char *const *)argv, | 342 | return mingw_spawn_1(P_NOWAIT, argv[0], (char *const *)argv, environ); |
344 | (const char *const *)environ); | ||
345 | } | 343 | } |
346 | 344 | ||
347 | int | 345 | int |
348 | mingw_execvp(const char *cmd, const char *const *argv) | 346 | mingw_execvp(const char *cmd, char *const *argv) |
349 | { | 347 | { |
350 | int ret = (int)mingw_spawn_1(P_WAIT, cmd, argv, (const char *const *)environ); | 348 | int ret = (int)mingw_spawn_1(P_WAIT, cmd, argv, environ); |
351 | if (ret != -1) | 349 | if (ret != -1) |
352 | exit(ret); | 350 | exit(ret); |
353 | return ret; | 351 | return ret; |
354 | } | 352 | } |
355 | 353 | ||
356 | int | 354 | int |
357 | mingw_execve(const char *cmd, const char *const *argv, const char *const *envp) | 355 | mingw_execve(const char *cmd, char *const *argv, char *const *envp) |
358 | { | 356 | { |
359 | int ret; | 357 | int ret; |
360 | int mode = P_WAIT; | 358 | int mode = P_WAIT; |
@@ -366,9 +364,9 @@ mingw_execve(const char *cmd, const char *const *argv, const char *const *envp) | |||
366 | } | 364 | } |
367 | 365 | ||
368 | int | 366 | int |
369 | mingw_execv(const char *cmd, const char *const *argv) | 367 | mingw_execv(const char *cmd, char *const *argv) |
370 | { | 368 | { |
371 | return mingw_execve(cmd, argv, (const char *const *)environ); | 369 | return mingw_execve(cmd, argv, environ); |
372 | } | 370 | } |
373 | 371 | ||
374 | /* POSIX version in libbb/procps.c */ | 372 | /* POSIX version in libbb/procps.c */ |
diff --git a/win32/system.c b/win32/system.c index 02aaaa0a1..44a47f861 100644 --- a/win32/system.c +++ b/win32/system.c | |||
@@ -10,7 +10,7 @@ int mingw_system(const char *cmd) | |||
10 | if (cmd == NULL) | 10 | if (cmd == NULL) |
11 | return 1; | 11 | return 1; |
12 | 12 | ||
13 | if ((proc=mingw_spawn_proc((char **)argv)) == -1) | 13 | if ((proc=mingw_spawn_proc(argv)) == -1) |
14 | return -1; | 14 | return -1; |
15 | 15 | ||
16 | h = (HANDLE)proc; | 16 | h = (HANDLE)proc; |