mirror of
https://github.com/reactos/reactos.git
synced 2024-07-31 08:39:05 +00:00
Fixed bugs in RtlExpandEnvironmentStrings_U() and RtlSetEnvironmentVariable()
svn path=/trunk/; revision=1018
This commit is contained in:
parent
6eb7010078
commit
853d9d4ae2
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: env.c,v 1.8 2000/02/19 19:34:49 ekohl Exp $
|
/* $Id: env.c,v 1.9 2000/02/27 15:45:57 ekohl Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS system libraries
|
* PROJECT: ReactOS system libraries
|
||||||
|
@ -19,6 +19,7 @@
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <ntdll/ntdll.h>
|
#include <ntdll/ntdll.h>
|
||||||
|
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -130,6 +131,9 @@ RtlExpandEnvironmentStrings_U (
|
||||||
int dst_max;
|
int dst_max;
|
||||||
int tail;
|
int tail;
|
||||||
|
|
||||||
|
DPRINT ("RtlExpandEnvironmentStrings_U %p %wZ %p %p\n",
|
||||||
|
Environment, Source, Destination, Length);
|
||||||
|
|
||||||
src_len = Source->Length / sizeof(WCHAR);
|
src_len = Source->Length / sizeof(WCHAR);
|
||||||
s = Source->Buffer;
|
s = Source->Buffer;
|
||||||
dst_max = Destination->MaximumLength / sizeof(WCHAR);
|
dst_max = Destination->MaximumLength / sizeof(WCHAR);
|
||||||
|
@ -162,7 +166,7 @@ RtlExpandEnvironmentStrings_U (
|
||||||
val.MaximumLength = dst_max * sizeof(WCHAR);
|
val.MaximumLength = dst_max * sizeof(WCHAR);
|
||||||
val.Buffer = d;
|
val.Buffer = d;
|
||||||
Status = RtlQueryEnvironmentVariable_U (Environment, &var, &val);
|
Status = RtlQueryEnvironmentVariable_U (Environment, &var, &val);
|
||||||
if (!NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
d += val.Length / sizeof(WCHAR);
|
d += val.Length / sizeof(WCHAR);
|
||||||
dst_max -= val.Length / sizeof(WCHAR);
|
dst_max -= val.Length / sizeof(WCHAR);
|
||||||
|
@ -190,6 +194,7 @@ copy:
|
||||||
if (dst_max)
|
if (dst_max)
|
||||||
Destination->Buffer[Destination->Length / sizeof(WCHAR)] = 0;
|
Destination->Buffer[Destination->Length / sizeof(WCHAR)] = 0;
|
||||||
|
|
||||||
|
DPRINT ("Destination %wZ\n", Destination);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,18 +424,22 @@ RtlQueryEnvironmentVariable_U (
|
||||||
PWSTR val;
|
PWSTR val;
|
||||||
int varlen;
|
int varlen;
|
||||||
int len;
|
int len;
|
||||||
|
BOOLEAN SysEnvUsed = FALSE;
|
||||||
|
|
||||||
DPRINT("RtlQueryEnvironmentVariable_U Environment %p Variable %wZ Value %p\n",
|
DPRINT("RtlQueryEnvironmentVariable_U Environment %p Variable %wZ Value %p\n",
|
||||||
Environment, Name, Value);
|
Environment, Name, Value);
|
||||||
|
|
||||||
if (!Environment)
|
if (Environment == NULL)
|
||||||
|
{
|
||||||
Environment = NtCurrentPeb()->ProcessParameters->Environment;
|
Environment = NtCurrentPeb()->ProcessParameters->Environment;
|
||||||
|
SysEnvUsed = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
if (!Environment)
|
if (Environment == NULL)
|
||||||
return STATUS_VARIABLE_NOT_FOUND;
|
return STATUS_VARIABLE_NOT_FOUND;
|
||||||
|
|
||||||
Value->Length = 0;
|
Value->Length = 0;
|
||||||
if (Environment == NtCurrentPeb()->ProcessParameters->Environment)
|
if (SysEnvUsed == TRUE)
|
||||||
RtlAcquirePebLock();
|
RtlAcquirePebLock();
|
||||||
|
|
||||||
wcs = Environment;
|
wcs = Environment;
|
||||||
|
@ -454,14 +463,16 @@ RtlQueryEnvironmentVariable_U (
|
||||||
{
|
{
|
||||||
wcscpy (Value->Buffer, val);
|
wcscpy (Value->Buffer, val);
|
||||||
DPRINT("Value %S\n", val);
|
DPRINT("Value %S\n", val);
|
||||||
|
DPRINT("Return STATUS_SUCCESS\n");
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
DPRINT("Return STATUS_BUFFER_TOO_SMALL\n");
|
||||||
Status = STATUS_BUFFER_TOO_SMALL;
|
Status = STATUS_BUFFER_TOO_SMALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Environment == NtCurrentPeb()->ProcessParameters->Environment)
|
if (SysEnvUsed == TRUE)
|
||||||
RtlReleasePebLock ();
|
RtlReleasePebLock ();
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -470,9 +481,10 @@ RtlQueryEnvironmentVariable_U (
|
||||||
wcs++;
|
wcs++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Environment == NtCurrentPeb()->ProcessParameters->Environment)
|
if (SysEnvUsed == TRUE)
|
||||||
RtlReleasePebLock ();
|
RtlReleasePebLock ();
|
||||||
|
|
||||||
|
DPRINT("Return STATUS_VARIABLE_NOT_FOUND\n");
|
||||||
return STATUS_VARIABLE_NOT_FOUND;
|
return STATUS_VARIABLE_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue