Author: pschweitzer Date: Sun Nov 20 17:00:39 2011 New Revision: 54459
URL: http://svn.reactos.org/svn/reactos?rev=54459&view=rev Log: [KERNEL32] Properly fix GetEnvironmentVariableW and set error in case of RtlInitUnicodeStringEx failure
Modified: trunk/reactos/dll/win32/kernel32/client/environ.c
Modified: trunk/reactos/dll/win32/kernel32/client/environ.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/e... ============================================================================== --- trunk/reactos/dll/win32/kernel32/client/environ.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/client/environ.c [iso-8859-1] Sun Nov 20 17:00:39 2011 @@ -181,24 +181,28 @@ { UniSize = UNICODE_STRING_MAX_BYTES - sizeof(UNICODE_NULL); } + + Status = RtlInitUnicodeStringEx(&VarName, lpName); + if (!NT_SUCCESS(Status)) + { + BaseSetLastNTError(Status); + return 0; + }
RtlInitEmptyUnicodeString(&VarValue, lpBuffer, UniSize); - Status = RtlInitUnicodeStringEx(&VarName, lpName); - if (NT_SUCCESS(Status)) - { - Status = RtlQueryEnvironmentVariable_U(NULL, &VarName, &VarValue); - if (!NT_SUCCESS(Status)) - { - if (Status == STATUS_BUFFER_TOO_SMALL) - { - return (VarValue.Length / sizeof(WCHAR)) + sizeof(ANSI_NULL); - } - BaseSetLastNTError (Status); - return 0; - } - - lpBuffer[VarValue.Length / sizeof(WCHAR)] = UNICODE_NULL; - } + + Status = RtlQueryEnvironmentVariable_U(NULL, &VarName, &VarValue); + if (!NT_SUCCESS(Status)) + { + if (Status == STATUS_BUFFER_TOO_SMALL) + { + return (VarValue.Length / sizeof(WCHAR)) + sizeof(ANSI_NULL); + } + BaseSetLastNTError (Status); + return 0; + } + + lpBuffer[VarValue.Length / sizeof(WCHAR)] = UNICODE_NULL;
return (VarValue.Length / sizeof(WCHAR)); }