Enusure that the output arguments are not changed on the library
__(w)getmainargs function failure.
---
mingw-w64-crt/misc/msvcrt__getmainargs.c | 13 ++++++++-----
mingw-w64-crt/misc/msvcrt__wgetmainargs.c | 13 ++++++++-----
2 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/mingw-w64-crt/misc/msvcrt__getmainargs.c
b/mingw-w64-crt/misc/msvcrt__getmainargs.c
index f0a37d960e44..9f43e8ad8a82 100644
--- a/mingw-w64-crt/misc/msvcrt__getmainargs.c
+++ b/mingw-w64-crt/misc/msvcrt__getmainargs.c
@@ -28,12 +28,15 @@ int __cdecl __getmainargs(int *argc, char ***argv, char
***envp, int expand_wild
* it is just redirect to the msvcrt.dll __getmainargs() function. And
* since Windows XP, this function has int return type.
*/
- *argc = -1;
- *argv = NULL;
- *envp = NULL;
- (void)__msvcrt_getmainargs(argc, argv, envp, expand_wildcards, startup_info);
- if (*argc == -1 || *argv == NULL || *envp == NULL)
+ int local_argc = -1;
+ char **local_argv = NULL;
+ char **local_envp = NULL;
+ (void)__msvcrt_getmainargs(&local_argc, &local_argv, &local_envp,
expand_wildcards, startup_info);
+ if (local_argc == -1 || local_argv == NULL || local_envp == NULL)
return -1;
+ *argc = local_argc;
+ *argv = local_argv;
+ *envp = local_envp;
return 0;
}
int __cdecl (*__MINGW_IMP_SYMBOL(__getmainargs))(int *, char ***, char ***,
int, _startupinfo *) = __getmainargs;
diff --git a/mingw-w64-crt/misc/msvcrt__wgetmainargs.c
b/mingw-w64-crt/misc/msvcrt__wgetmainargs.c
index f18549951ff7..eba017f88d82 100644
--- a/mingw-w64-crt/misc/msvcrt__wgetmainargs.c
+++ b/mingw-w64-crt/misc/msvcrt__wgetmainargs.c
@@ -28,12 +28,15 @@ int __cdecl __wgetmainargs(int *argc, wchar_t ***argv,
wchar_t ***envp, int expa
* it is just redirect to the msvcrt.dll __wgetmainargs() function. And
* since Windows XP, this function has int return type.
*/
- *argc = -1;
- *argv = NULL;
- *envp = NULL;
- (void)__msvcrt_wgetmainargs(argc, argv, envp, expand_wildcards,
startup_info);
- if (*argc == -1 || *argv == NULL || *envp == NULL)
+ int local_argc = -1;
+ wchar_t **local_argv = NULL;
+ wchar_t **local_envp = NULL;
+ (void)__msvcrt_wgetmainargs(&local_argc, &local_argv, &local_envp,
expand_wildcards, startup_info);
+ if (local_argc == -1 || local_argv == NULL || local_envp == NULL)
return -1;
+ *argc = local_argc;
+ *argv = local_argv;
+ *envp = local_envp;
return 0;
}
int __cdecl (*__MINGW_IMP_SYMBOL(__wgetmainargs))(int *, wchar_t ***, wchar_t
***, int, _startupinfo *) = __wgetmainargs;
--
2.20.1
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public