From eb094728709b08f42a3db13074a6105120da24cb Mon Sep 17 00:00:00 2001 From: Andrew Nguyen Date: Wed, 6 Oct 2010 21:59:57 -0500 Subject: [PATCH] msvcrt: Initialize _wenviron in Unicode environment getter function. --- dlls/msvcrt/environ.c | 8 ++++++-- dlls/msvcrt/tests/environ.c | 7 +++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/dlls/msvcrt/environ.c b/dlls/msvcrt/environ.c index 6ceeebb77e6..add5905cf35 100644 --- a/dlls/msvcrt/environ.c +++ b/dlls/msvcrt/environ.c @@ -34,7 +34,7 @@ char * CDECL MSVCRT_getenv(const char *name) char **environ; unsigned int length=strlen(name); - for (environ = *__p__environ(); *environ; environ++) + for (environ = MSVCRT__environ; *environ; environ++) { char *str = *environ; char *pos = strchr(str,'='); @@ -55,7 +55,11 @@ MSVCRT_wchar_t * CDECL _wgetenv(const MSVCRT_wchar_t *name) MSVCRT_wchar_t **environ; unsigned int length=strlenW(name); - for (environ = *__p__wenviron(); *environ; environ++) + /* Initialize the _wenviron array if it's not already created. */ + if (!MSVCRT__wenviron) + MSVCRT__wenviron = msvcrt_SnapshotOfEnvironmentW(NULL); + + for (environ = MSVCRT__wenviron; *environ; environ++) { MSVCRT_wchar_t *str = *environ; MSVCRT_wchar_t *pos = strchrW(str,'='); diff --git a/dlls/msvcrt/tests/environ.c b/dlls/msvcrt/tests/environ.c index 2e3e7f8cea6..9e1263a0f74 100644 --- a/dlls/msvcrt/tests/environ.c +++ b/dlls/msvcrt/tests/environ.c @@ -125,6 +125,9 @@ static void test__environ(void) static void test__wenviron(void) { + static const WCHAR cat_eq_dogW[] = {'c','a','t','=','d','o','g',0}; + static const WCHAR cat_eqW[] = {'c','a','t','=',0}; + int argc; char **argv, **envp = NULL; WCHAR **wargv, **wenvp = NULL; @@ -166,6 +169,10 @@ static void test__wenviron(void) /* _wenviron isn't initialized until __wgetmainargs is called or * one of the Unicode environment manipulation functions is called. */ + ok( _wputenv(cat_eq_dogW) == 0, "failed setting cat=dog\n" ); + ok( *p_wenviron != NULL, "Expected _wenviron to be non-NULL\n" ); + ok( _wputenv(cat_eqW) == 0, "failed deleting cat\n" ); + __wgetmainargs(&argc, &wargv, &wenvp, 0, &mode); ok( *p_wenviron != NULL, "Expected _wenviron to be non-NULL\n" ); -- 2.11.4.GIT