- RtlSetEnvironmentVariable: To delete a variable, it is necessary to pass a NULL pointer as the value; passing an empty string should create an empty variable. Remove Value->Length > 0 check.

- SetEnvironmentVariable(A|W): When given a NULL value, pass NULL to RtlSetEnvironmentVariable.
- cmd_set: When given an empty value, pass NULL to SetEnvironmentVariable.

svn path=/trunk/; revision=35672
This commit is contained in:
Jeffrey Morlan 2008-08-26 15:28:29 +00:00
parent a9431cc596
commit fc46305c63
3 changed files with 35 additions and 16 deletions

View file

@ -154,7 +154,7 @@ INT cmd_set (LPTSTR param)
}
*p++ = _T('\0');
if (!SetEnvironmentVariable(param, p))
if (!SetEnvironmentVariable(param, *p ? p : NULL))
{
nErrorLevel = 1;
return 1;

View file

@ -193,18 +193,27 @@ SetEnvironmentVariableA (
&VarName,
TRUE);
RtlInitAnsiString (&VarValue,
(LPSTR)lpValue);
RtlAnsiStringToUnicodeString (&VarValueU,
&VarValue,
TRUE);
if (lpValue)
{
RtlInitAnsiString (&VarValue,
(LPSTR)lpValue);
RtlAnsiStringToUnicodeString (&VarValueU,
&VarValue,
TRUE);
Status = RtlSetEnvironmentVariable (NULL,
&VarNameU,
&VarValueU);
Status = RtlSetEnvironmentVariable (NULL,
&VarNameU,
&VarValueU);
RtlFreeUnicodeString (&VarValueU);
}
else
{
Status = RtlSetEnvironmentVariable (NULL,
&VarNameU,
NULL);
}
RtlFreeUnicodeString (&VarNameU);
RtlFreeUnicodeString (&VarValueU);
if (!NT_SUCCESS(Status))
{
@ -235,12 +244,22 @@ SetEnvironmentVariableW (
RtlInitUnicodeString (&VarName,
lpName);
RtlInitUnicodeString (&VarValue,
lpValue);
if (lpValue)
{
RtlInitUnicodeString (&VarValue,
lpValue);
Status = RtlSetEnvironmentVariable (NULL,
&VarName,
&VarValue);
}
else
{
Status = RtlSetEnvironmentVariable (NULL,
&VarName,
NULL);
}
Status = RtlSetEnvironmentVariable (NULL,
&VarName,
&VarValue);
if (!NT_SUCCESS(Status))
{
SetLastErrorByStatus (Status);

View file

@ -355,7 +355,7 @@ RtlSetEnvironmentVariable(PWSTR *Environment,
}
found:
if (Value != NULL && Value->Length > 0)
if (Value != NULL)
{
hole_len = tail - hole;
/* calculate new environment size */