diff --git a/src/alias.c b/src/alias.c index 929a648..8280b0d 100644 --- a/src/alias.c +++ b/src/alias.c @@ -39,6 +39,8 @@ typedef struct { int CreateProcessW( void *, void *, void *, void *, int, int, void *, void *, void *, void * ) __attribute((dllimport,stdcall)); +void ExitProcess(int) + __attribute((dllimport,stdcall)); char16_t *GetCommandLineW(void) __attribute((dllimport,stdcall)); int GetExitCodeProcess(void *, int *) @@ -128,11 +130,7 @@ static void fail(char *reason, int len) WriteFile(out, reason, len, &dummy, 0); } -#if __i386 -__attribute((force_align_arg_pointer)) -#endif -__attribute((externally_visible)) -int mainCRTStartup(void) +static int aliasmain(void) { // Replace alias module with adjacent target char16_t exebuf[MAX_PATH]; @@ -179,3 +177,13 @@ int mainCRTStartup(void) GetExitCodeProcess(pi.process, &ret); return ret; } + +#if __i386 +__attribute((force_align_arg_pointer)) +#endif +__attribute((externally_visible)) +int mainCRTStartup(void) +{ + int r = aliasmain(); + ExitProcess(r); +} diff --git a/src/debugbreak.c b/src/debugbreak.c index 1b64866..0583548 100644 --- a/src/debugbreak.c +++ b/src/debugbreak.c @@ -73,5 +73,6 @@ mainCRTStartup(void) CloseHandle(h); } } - return GetLastError() != ERROR_NO_MORE_FILES; + int status = GetLastError() != ERROR_NO_MORE_FILES; + ExitProcess(status); } diff --git a/src/w64devkit.c b/src/w64devkit.c index be18fee..92b6448 100644 --- a/src/w64devkit.c +++ b/src/w64devkit.c @@ -152,5 +152,5 @@ mainCRTStartup(void) DWORD ret; WaitForSingleObject(pi.hProcess, INFINITE); GetExitCodeProcess(pi.hProcess, &ret); - return ret; + ExitProcess(ret); }