From: Rémi Bernon rbernon@codeweavers.com
--- 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 34f50cd6a69..961bef504b6 100644 --- a/dlls/msvcr80/tests/msvcr80.c +++ b/dlls/msvcr80/tests/msvcr80.c @@ -197,11 +197,8 @@ static void test_dupenv_s(void) len = 0xdeadbeef; tmp = (void *)0xdeadbeef; ret = p_dupenv_s( &tmp, &len, "nonexistent" ); - todo_wine ok( !ret, "_dupenv_s returned %d\n", ret ); - todo_wine ok( !len, "_dupenv_s returned length is %Id\n", len ); - todo_wine ok( !tmp, "_dupenv_s returned pointer is %p\n", tmp ); }
diff --git a/dlls/msvcrt/environ.c b/dlls/msvcrt/environ.c index 729eb0560bd..437d4d6171f 100644 --- a/dlls/msvcrt/environ.c +++ b/dlls/msvcrt/environ.c @@ -249,7 +249,12 @@ int CDECL _dupenv_s(char **buffer, size_t *numberOfElements, const char *varname if (!MSVCRT_CHECK_PMT(buffer != NULL)) return EINVAL; if (!MSVCRT_CHECK_PMT(varname != NULL)) return EINVAL;
- if (!(e = getenv(varname))) return *_errno() = EINVAL; + if (!(e = getenv(varname))) + { + *buffer = NULL; + *numberOfElements = 0; + return 0; + }
sz = strlen(e) + 1; if (!(*buffer = malloc(sz)))