{"thread":{"id":"11436","subject":"[MinGW PATCH] spawn*: default extension to .exe if none is given","startedAt":"2007-12-31T11:45:52Z","lastAt":"2007-12-31T11:45:52Z","messageCount":1,"participants":["Nguyễn Thái Ngọc Duy"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"64260","messageId":"20071231114552.GA32421@laptop","threadId":"11436","inReplyTo":null,"subject":"[MinGW PATCH] spawn*: default extension to .exe if none is given","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2007-12-31T11:45:52Z","receivedAt":"2007-12-31T11:45:52Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"This is the behavior of spawn* (or at least Wine source does it).\nCreateProcess() does not have such assumption.\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n compat/mingw.c |   19 ++++++++++++++++++-\n 1 files changed, 18 insertions(+), 1 deletions(-)\n\ndiff --git a/compat/mingw.c b/compat/mingw.c\nindex 8bbe21b..dc54303 100644\n--- a/compat/mingw.c\n+++ b/compat/mingw.c\n@@ -533,8 +533,9 @@ static pid_t mingw_spawnve(const char *cmd, const char **argv, char **env,\n {\n \tSTARTUPINFO si;\n \tPROCESS_INFORMATION pi;\n-\tstruct strbuf envblk, args;\n+\tstruct strbuf envblk, args, newcmd;\n \tunsigned flags;\n+\tconst char *basename;\n \tBOOL ret;\n \n \t/* Determine whether or not we are associated to a console */\n@@ -565,6 +566,21 @@ static pid_t mingw_spawnve(const char *cmd, const char **argv, char **env,\n \tsi.hStdOutput = (HANDLE) _get_osfhandle(1);\n \tsi.hStdError = (HANDLE) _get_osfhandle(2);\n \n+\t/* Assume .exe if there is no extension */\n+\tstrbuf_init(&newcmd, 0);\n+\tbasename = strrchr(cmd, '/');\n+\tif (strrchr(cmd, '\\\\') > basename)\n+\t\tbasename = strrchr(cmd, '\\\\');\n+\tif (basename)\n+\t\tbasename ++;\n+\telse\n+\t\tbasename = cmd;\n+\tif (!strchr(basename, '.')) {\n+\t\tstrbuf_addstr(&newcmd, cmd);\n+\t\tstrbuf_addstr(&newcmd, \".exe\");\n+\t\tcmd = newcmd.buf;\n+\t}\n+\n \t/* concatenate argv, quoting args as we go */\n \tstrbuf_init(&args, 0);\n \tif (prepend_cmd) {\n@@ -609,6 +625,7 @@ static pid_t mingw_spawnve(const char *cmd, const char **argv, char **env,\n \tif (env)\n \t\tstrbuf_release(&envblk);\n \tstrbuf_release(&args);\n+\tstrbuf_release(&newcmd);\n \n \tif (!ret) {\n \t\terrno = ENOENT;\n-- \n1.5.4.rc2.1097.gb6e0d\n"}]}