kernelbase: Don't return ERROR_INSUFFICIENT_BUFFER from GetEnvironmentVariableW.

Windows doesn't do this (except XP, and then only for empty variables,
where it returns ERROR_MORE_DATA).

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48471
Signed-off-by: Vladimir Panteleev <git@vladimir.panteleev.md>
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Vladimir Panteleev 2020-05-14 23:12:25 +02:00 committed by Alexandre Julliard
parent 7ad5e1bc8a
commit 4c06599c1f
2 changed files with 8 additions and 1 deletions

View File

@ -106,9 +106,12 @@ static void test_GetSetEnvironmentVariableA(void)
GetLastError());
/* Try to retrieve the environment variable we just set */
SetLastError(0xdeadbeef);
ret_size = GetEnvironmentVariableA(name, NULL, 0);
ok(ret_size == strlen(value) + 1,
"should return length with terminating 0 ret_size=%d\n", ret_size);
ok(GetLastError() == 0xdeadbeef,
"should not fail with zero size but GetLastError=%d\n", GetLastError());
lstrcpyA(buf, "foo");
ret_size = GetEnvironmentVariableA(name, buf, lstrlenA(value));
@ -208,10 +211,13 @@ static void test_GetSetEnvironmentVariableW(void)
GetLastError());
/* Try to retrieve the environment variable we just set */
SetLastError(0xdeadbeef);
ret_size = GetEnvironmentVariableW(name, NULL, 0);
ok(ret_size == lstrlenW(value) + 1,
"should return length with terminating 0 ret_size=%d\n",
ret_size);
ok(GetLastError() == 0xdeadbeef,
"should not fail with zero size but GetLastError=%d\n", GetLastError());
lstrcpyW(buf, fooW);
ret_size = GetEnvironmentVariableW(name, buf, lstrlenW(value));

View File

@ -1395,7 +1395,8 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetEnvironmentVariableW( LPCWSTR name, LPWSTR val
status = RtlQueryEnvironmentVariable_U( NULL, &us_name, &us_value );
len = us_value.Length / sizeof(WCHAR);
if (!set_ntstatus( status )) return (status == STATUS_BUFFER_TOO_SMALL) ? len + 1 : 0;
if (status == STATUS_BUFFER_TOO_SMALL) return len + 1;
if (!set_ntstatus( status )) return 0;
if (size) val[len] = 0;
return len;
}