- 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'); *p++ = _T('\0');
if (!SetEnvironmentVariable(param, p)) if (!SetEnvironmentVariable(param, *p ? p : NULL))
{ {
nErrorLevel = 1; nErrorLevel = 1;
return 1; return 1;

View file

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

View file

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