Unified · Split
| @@ -16,28 +16,32 @@ typedef struct · 15 unmodified lines | ||
| 16 | 16 | int newmode; |
| 17 | 17 | } _startupinfo; |
| 18 | 18 | |
| 19 | −int __getmainargs(int *pargc, char ***pargv, char ***penv, int globb, _startupinfo*); | |
| 19 | +// prototype of __getmainargs: | |
| 20 | +// in msvcrt v6.0 : return void | |
| 21 | +// in msvcrt v7.0 : return int | |
| 22 | +// using first for compatibility | |
| 23 | +void __getmainargs(int *pargc, char ***pargv, char ***penv, int globb, _startupinfo*); | |
| 20 | 24 | int main(int argc, char **argv, char **env); |
| 21 | 25 | |
| 22 | 26 | int _start(void) |
| 23 | 27 | { |
| 24 | 28 | __TRY__ |
| 25 | − int argc; char **argv; char **env; | |
| 29 | + int argc; char **argv; char **env; int ret; | |
| 26 | 30 | _startupinfo start_info = {0}; |
| 27 | 31 | |
| 28 | 32 | _controlfp(0x10000, 0x30000); |
| 29 | 33 | __set_app_type(__CONSOLE_APP); |
| 30 | 34 | |
| 31 | − if (! __getmainargs(&argc, &argv, &env, 0, &start_info)) | |
| 35 | + argv = NULL; | |
| 36 | + __getmainargs(&argc, &argv, &env, 0, &start_info); | |
| 37 | + // check success comparing if argv now is not NULL | |
| 38 | + if (! argv) | |
| 32 | 39 | { |
| 33 | − int ret; | |
| 34 | − | |
| 35 | − ret = main(argc, argv, env); | |
| 36 | − exit(ret); | |
| 40 | + ExitProcess(-1); | |
| 37 | 41 | } |
| 38 | − // __getmainargs failed because possible few memory on the heap. | |
| 39 | − // end with exit code of 3, similar to abort() | |
| 40 | − ExitProcess(3); | |
| 42 | + | |
| 43 | + ret = main(argc, argv, env); | |
| 44 | + exit(ret); | |
| 41 | 45 | } |
| 42 | 46 | |
| 43 | 47 | // ============================================= |