From 230944a8f7b03d2b27dd65e2649f2067c31c65ed Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Tue, 27 Jun 2017 16:31:36 +0200 Subject: 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 Signed-off-by: Ron Yorston --- coreutils/timeout.c | 2 +- include/mingw.h | 8 ++++---- win32/process.c | 38 ++++++++++++++++++-------------------- 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) if (argv[0] == NULL) bb_show_usage(); - if ((ret=mingw_spawn_proc(argv)) == -1) + if ((ret=mingw_spawn_proc((const char **)argv)) == -1) bb_perror_msg_and_die("can't execute '%s'", argv[0]); 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); #define PRIuMAX "I64u" pid_t FAST_FUNC mingw_spawn(char **argv); -intptr_t FAST_FUNC mingw_spawn_proc(char **argv); -int mingw_execv(const char *cmd, const char *const *argv); -int mingw_execvp(const char *cmd, const char *const *argv); -int mingw_execve(const char *cmd, const char *const *argv, const char *const *envp); +intptr_t FAST_FUNC mingw_spawn_proc(const char **argv); +int mingw_execv(const char *cmd, char *const *argv); +int mingw_execvp(const char *cmd, char *const *argv); +int mingw_execve(const char *cmd, char *const *argv, char *const *envp); #define spawn mingw_spawn #define execvp mingw_execvp #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) } static intptr_t -spawnveq(int mode, const char *path, const char *const *argv, const char *const *env) +spawnveq(int mode, const char *path, char *const *argv, char *const *env) { char **new_argv; int i, argc = 0; intptr_t ret; if (!argv) { - const char *empty_argv[] = { path, NULL }; + char *const empty_argv[] = { (char *)path, NULL }; return spawnve(mode, path, empty_argv, env); } @@ -227,7 +227,7 @@ spawnveq(int mode, const char *path, const char *const *argv, const char *const for (i = 0;i < argc;i++) new_argv[i] = quote_arg(argv[i]); new_argv[argc] = NULL; - ret = spawnve(mode, path, (const char *const *)new_argv, env); + ret = spawnve(mode, path, new_argv, env); for (i = 0;i < argc;i++) if (new_argv[i] != argv[i]) free(new_argv[i]); @@ -238,21 +238,21 @@ spawnveq(int mode, const char *path, const char *const *argv, const char *const #if ENABLE_FEATURE_PREFER_APPLETS || ENABLE_FEATURE_SH_STANDALONE static intptr_t mingw_spawn_applet(int mode, - const char *const *argv, - const char *const *envp) + char *const *argv, + char *const *envp) { return spawnveq(mode, bb_busybox_exec_path, argv, envp); } #endif static intptr_t -mingw_spawn_interpreter(int mode, const char *prog, const char *const *argv, const char *const *envp) +mingw_spawn_interpreter(int mode, const char *prog, char *const *argv, char *const *envp) { intptr_t ret; char **opts; int nopts; const char *interpr = parse_interpreter(prog, &opts, &nopts); - const char **new_argv; + char **new_argv; int argc = 0; if (!interpr) @@ -264,11 +264,11 @@ mingw_spawn_interpreter(int mode, const char *prog, const char *const *argv, con new_argv = malloc(sizeof(*argv)*(argc+nopts+2)); memcpy(new_argv+1, opts, sizeof(*opts)*nopts); memcpy(new_argv+nopts+2, argv+1, sizeof(*argv)*argc); - new_argv[nopts+1] = prog; /* pass absolute path */ + new_argv[nopts+1] = (char *)prog; /* pass absolute path */ #if ENABLE_FEATURE_PREFER_APPLETS || ENABLE_FEATURE_SH_STANDALONE if (find_applet_by_name(interpr) >= 0) { - new_argv[0] = interpr; + new_argv[0] = (char *)interpr; ret = mingw_spawn_applet(mode, new_argv, envp); } else #endif @@ -292,7 +292,7 @@ mingw_spawn_interpreter(int mode, const char *prog, const char *const *argv, con } static intptr_t -mingw_spawn_1(int mode, const char *cmd, const char *const *argv, const char *const *envp) +mingw_spawn_1(int mode, const char *cmd, char *const *argv, char *const *envp) { intptr_t ret; @@ -331,30 +331,28 @@ mingw_spawn(char **argv) { intptr_t ret; - ret = mingw_spawn_1(P_NOWAIT, argv[0], (const char *const *)argv, - (const char *const *)environ); + ret = mingw_spawn_1(P_NOWAIT, argv[0], (char *const *)argv, environ); return ret == -1 ? -1 : GetProcessId((HANDLE)ret); } intptr_t FAST_FUNC -mingw_spawn_proc(char **argv) +mingw_spawn_proc(const char **argv) { - return mingw_spawn_1(P_NOWAIT, argv[0], (const char *const *)argv, - (const char *const *)environ); + return mingw_spawn_1(P_NOWAIT, argv[0], (char *const *)argv, environ); } int -mingw_execvp(const char *cmd, const char *const *argv) +mingw_execvp(const char *cmd, char *const *argv) { - int ret = (int)mingw_spawn_1(P_WAIT, cmd, argv, (const char *const *)environ); + int ret = (int)mingw_spawn_1(P_WAIT, cmd, argv, environ); if (ret != -1) exit(ret); return ret; } int -mingw_execve(const char *cmd, const char *const *argv, const char *const *envp) +mingw_execve(const char *cmd, char *const *argv, char *const *envp) { int ret; int mode = P_WAIT; @@ -366,9 +364,9 @@ mingw_execve(const char *cmd, const char *const *argv, const char *const *envp) } int -mingw_execv(const char *cmd, const char *const *argv) +mingw_execv(const char *cmd, char *const *argv) { - return mingw_execve(cmd, argv, (const char *const *)environ); + return mingw_execve(cmd, argv, environ); } /* 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) if (cmd == NULL) return 1; - if ((proc=mingw_spawn_proc((char **)argv)) == -1) + if ((proc=mingw_spawn_proc(argv)) == -1) return -1; h = (HANDLE)proc; -- cgit v1.2.3-55-g6feb