From f40b82295ec3d4cb35d2b660880fee768aee0299 Mon Sep 17 00:00:00 2001 From: Carlos Montiers Date: Sat, 22 Nov 2014 19:00:49 -0300 Subject: [PATCH] __getmainargs compatibility checking success --- win32/lib/crt1.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/win32/lib/crt1.c b/win32/lib/crt1.c index 0be446f..eb2a7b5 100644 --- a/win32/lib/crt1.c +++ b/win32/lib/crt1.c @@ -16,28 +16,32 @@ typedef struct int newmode; } _startupinfo; -int __getmainargs(int *pargc, char ***pargv, char ***penv, int globb, _startupinfo*); +// prototype of __getmainargs: +// in msvcrt v6.0 : return void +// in msvcrt v7.0 : return int +// using first for compatibility +void __getmainargs(int *pargc, char ***pargv, char ***penv, int globb, _startupinfo*); int main(int argc, char **argv, char **env); int _start(void) { __TRY__ - int argc; char **argv; char **env; + int argc; char **argv; char **env; int ret; _startupinfo start_info = {0}; _controlfp(0x10000, 0x30000); __set_app_type(__CONSOLE_APP); - if (! __getmainargs(&argc, &argv, &env, 0, &start_info)) + argv = NULL; + __getmainargs(&argc, &argv, &env, 0, &start_info); + // check success comparing if argv now is not NULL + if (! argv) { - int ret; - - ret = main(argc, argv, env); - exit(ret); + ExitProcess(-1); } - // __getmainargs failed because possible few memory on the heap. - // end with exit code of 3, similar to abort() - ExitProcess(3); + + ret = main(argc, argv, env); + exit(ret); } // =============================================