git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] compat/mingw.[ch]: Change return type of exec functions to int

From
Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Date
Apr 5, 2012, 17:48 UTC
Message-ID
<4F7DDAFE.1060902@ramsay1.demon.co.uk>

The POSIX standard specifies a return type of int for all six exec functions. In addition, all exec functions return -1 on error, and simply do not return on success. However, the current emulation of the exec functions on mingw are declared with a void return type.

This would cause a problem should any code attempt to call the exec function in a non-void context. In particular, if an exec function were used in a conditional it would fail to compile.

In order to improve the fidelity of the emulation, we change the return type of the mingw_execv[p] functions to int and return -1 on error.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
---
Hi Jeff,

Since commit b0984f82 ("run-command: treat inaccessible directories as ENOENT", 30-03-2012), the mingw build fails as follows:

        CC run-command.o
    run-command.c: In function 'sane_execvp':
    run-command.c:124: error: invalid use of void expression
    make: *** [run-command.o] Error 1

My first reaction was to simply remove the conditional since, if execvp() returns at all, the result will always be -1 and so the condition will always be false. ie. the conditional is pointless.

However, I found the incorrect return type of the mingw_execv[p]() to be a gratuitous incompatibility, so ... :-P

Could you (or Junio?) add this patch prior to your patch on this branch ? Thanks in advance!

I will let you decide if you want to remove the conditional as well ...

ATB, Ramsay Jones

 compat/mingw.c |    6 ++++--
 compat/mingw.h |    4 ++--
 2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/compat/mingw.c b/compat/mingw.c
index a0ac487..afc892d 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1003,7 +1003,7 @@ static void mingw_execve(const char *cmd, char *const *argv, char *const *env)
 	}
 }
 
-void mingw_execvp(const char *cmd, char *const *argv)
+int mingw_execvp(const char *cmd, char *const *argv)
 {
 	char **path = get_path_split();
 	char *prog = path_lookup(cmd, path, 0);
@@ -1015,11 +1015,13 @@ void mingw_execvp(const char *cmd, char *const *argv)
 		errno = ENOENT;
 
 	free_path_split(path);
+	return -1;
 }
 
-void mingw_execv(const char *cmd, char *const *argv)
+int mingw_execv(const char *cmd, char *const *argv)
 {
 	mingw_execve(cmd, argv, environ);
+	return -1;
 }
 
 int mingw_kill(pid_t pid, int sig)
diff --git a/compat/mingw.h b/compat/mingw.h
index 0ff1e04..ef5b150 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -274,9 +274,9 @@ int mingw_utime(const char *file_name, const struct utimbuf *times);
 pid_t mingw_spawnvpe(const char *cmd, const char **argv, char **env,
 		     const char *dir,
 		     int fhin, int fhout, int fherr);
-void mingw_execvp(const char *cmd, char *const *argv);
+int mingw_execvp(const char *cmd, char *const *argv);
 #define execvp mingw_execvp
-void mingw_execv(const char *cmd, char *const *argv);
+int mingw_execv(const char *cmd, char *const *argv);
 #define execv mingw_execv
 
 static inline unsigned int git_ntohl(unsigned int x)
-- 
1.7.9
Next: Jonathan Nieder
Message 1 of 8 in “compat/mingw.[ch]: Change return type of exec functions to int”
  1. compat/mingw.[ch]: Change return type of exec functions to intRamsay Jones, Apr 5, 2012
  2. Jonathan NiederApr 5, 2012
  3. Jeff KingApr 5, 2012
  4. Jonathan NiederApr 5, 2012
  5. Jeff KingApr 6, 2012
  6. Jonathan NiederApr 6, 2012
  7. Jeff KingApr 6, 2012
  8. Junio C HamanoApr 6, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.