[KERNEL32]
authorPierre Schweitzer <pierre@reactos.org>
Sun, 20 Nov 2011 17:00:39 +0000 (17:00 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Sun, 20 Nov 2011 17:00:39 +0000 (17:00 +0000)
Properly fix GetEnvironmentVariableW and set error in case of RtlInitUnicodeStringEx failure

svn path=/trunk/; revision=54459

reactos/dll/win32/kernel32/client/environ.c

index 119791a..b4e93c4 100644 (file)
@@ -181,25 +181,29 @@ GetEnvironmentVariableW(IN LPCWSTR lpName,
     {
         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))
     {
-        Status = RtlQueryEnvironmentVariable_U(NULL, &VarName, &VarValue);
-        if (!NT_SUCCESS(Status))
+        if (Status == STATUS_BUFFER_TOO_SMALL)
         {
-            if (Status == STATUS_BUFFER_TOO_SMALL)
-            {
-                return (VarValue.Length / sizeof(WCHAR)) + sizeof(ANSI_NULL);
-            }
-            BaseSetLastNTError (Status);
-            return 0;
+            return (VarValue.Length / sizeof(WCHAR)) + sizeof(ANSI_NULL);
         }
-
-        lpBuffer[VarValue.Length / sizeof(WCHAR)] = UNICODE_NULL;
+        BaseSetLastNTError (Status);
+        return 0;
     }
 
+    lpBuffer[VarValue.Length / sizeof(WCHAR)] = UNICODE_NULL;
+
     return (VarValue.Length / sizeof(WCHAR));
 }