Module: wine Branch: master Commit: aafef01cc2a0c49ed902e63edac6da4b0278e53f URL: https://gitlab.winehq.org/wine/wine/-/commit/aafef01cc2a0c49ed902e63edac6da4...
Author: Rémi Bernon rbernon@codeweavers.com Date: Thu Feb 23 12:21:03 2023 +0100
msvcrt: Fix _wdupenv_s behavior with missing env var.
---
dlls/msvcr80/tests/msvcr80.c | 3 --- dlls/msvcrt/environ.c | 7 ++++++- 2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/dlls/msvcr80/tests/msvcr80.c b/dlls/msvcr80/tests/msvcr80.c index 961bef504b6..fa04b024031 100644 --- a/dlls/msvcr80/tests/msvcr80.c +++ b/dlls/msvcr80/tests/msvcr80.c @@ -211,11 +211,8 @@ static void test_wdupenv_s(void) len = 0xdeadbeef; tmp = (void *)0xdeadbeef; ret = p_wdupenv_s( &tmp, &len, L"nonexistent" ); - todo_wine ok( !ret, "_wdupenv_s returned %d\n", ret ); - todo_wine ok( !len, "_wdupenv_s returned length is %Id\n", len ); - todo_wine ok( !tmp, "_wdupenv_s returned pointer is %p\n", tmp ); }
diff --git a/dlls/msvcrt/environ.c b/dlls/msvcrt/environ.c index e9c15b732ba..2c2a3353582 100644 --- a/dlls/msvcrt/environ.c +++ b/dlls/msvcrt/environ.c @@ -279,7 +279,12 @@ int CDECL _wdupenv_s(wchar_t **buffer, size_t *numberOfElements, if (!MSVCRT_CHECK_PMT(buffer != NULL)) return EINVAL; if (!MSVCRT_CHECK_PMT(varname != NULL)) return EINVAL;
- if (!(e = _wgetenv(varname))) return *_errno() = EINVAL; + if (!(e = _wgetenv(varname))) + { + *buffer = NULL; + if (numberOfElements) *numberOfElements = 0; + return 0; + }
sz = wcslen(e) + 1; if (!(*buffer = malloc(sz * sizeof(wchar_t))))