mirror of
https://github.com/reactos/reactos.git
synced 2025-06-04 00:40:31 +00:00
[KERNEL32]
Properly fix GetEnvironmentVariableW and set error in case of RtlInitUnicodeStringEx failure svn path=/trunk/; revision=54459
This commit is contained in:
parent
c1f9c89d62
commit
37bc0a5a08
1 changed files with 18 additions and 14 deletions
|
@ -181,25 +181,29 @@ GetEnvironmentVariableW(IN LPCWSTR lpName,
|
||||||
{
|
{
|
||||||
UniSize = UNICODE_STRING_MAX_BYTES - sizeof(UNICODE_NULL);
|
UniSize = UNICODE_STRING_MAX_BYTES - sizeof(UNICODE_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status = RtlInitUnicodeStringEx(&VarName, lpName);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
BaseSetLastNTError(Status);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
RtlInitEmptyUnicodeString(&VarValue, lpBuffer, UniSize);
|
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));
|
return (VarValue.Length / sizeof(WCHAR));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue