Fix startup code for native NT processes.
Modified: trunk/reactos/lib/nt/entry_point.c
_____
Modified: trunk/reactos/lib/nt/entry_point.c
--- trunk/reactos/lib/nt/entry_point.c 2005-10-08 20:16:41 UTC (rev
18362)
+++ trunk/reactos/lib/nt/entry_point.c 2005-10-08 22:38:55 UTC (rev
18363)
@@ -23,34 +23,49 @@
ULONG DebugFlag
);
-//#define NDEBUG
+#define NDEBUG
#include <debug.h>
/* FUNCTIONS
****************************************************************/
-ULONG FASTCALL WideCharStringToUnicodeString (PWCHAR wsIn,
PUNICODE_STRING usOut)
+static
+ULONG STDCALL WideCharStringToUnicodeString (HANDLE hHeap, PWCHAR wsIn,
PUNICODE_STRING usOut)
{
- ULONG Length = 0;
+ ULONG CharCount = 0;
PWCHAR CurrentChar = wsIn;
+ ULONG BufferLength = 0;
- DPRINT("%s(%08lx,%08lx) called\n", __FUNCTION__, wsIn, usOut);
+ DPRINT("%s(%S) called\n", __FUNCTION__, wsIn);
if (NULL != CurrentChar)
{
- usOut->Buffer = CurrentChar;
while (*CurrentChar ++)
{
- ++ Length;
+ ++ CharCount;
while (*CurrentChar ++)
{
- ++ Length;
+ ++ CharCount;
}
}
- ++ Length;
+ ++ CharCount;
}
- usOut->Length = Length;
- usOut->MaximumLength = Length;
- return Length;
+ BufferLength = CharCount * sizeof *usOut->Buffer;
+ if (0 < CharCount)
+ {
+ usOut->Buffer = RtlAllocateHeap (hHeap, 0,
BufferLength);
+ if (NULL != usOut->Buffer)
+ {
+ RtlCopyMemory (usOut->Buffer, wsIn,
BufferLength);
+ usOut->Length = BufferLength;
+ usOut->MaximumLength = BufferLength;
+ }
+ } else {
+ usOut->Buffer = NULL;
+ usOut->Length = 0;
+ usOut->MaximumLength = 0;
+ }
+
+ return usOut->Length;
}
VOID
@@ -122,7 +137,6 @@
{
/* Save one token pointer */
*ArgumentList++ = Destination;
- DPRINT("NT: argv[%d]=[%d]\n", argc, Destination);
/* Increase one token count */
argc++;
@@ -142,9 +156,11 @@
/* Now handle the enviornment, point the envp at our current list
location. */
envp = ArgumentList;
- if (0 < WideCharStringToUnicodeString
(ProcessParameters->Environment, & UnicodeEnvironment))
+ if (0 < WideCharStringToUnicodeString (Peb->ProcessHeap,
+ ProcessParameters->Environment, &
UnicodeEnvironment))
{
RtlUnicodeStringToAnsiString (& AnsiEnvironment, &
UnicodeEnvironment, TRUE);
+ RtlFreeUnicodeString (& UnicodeEnvironment);
/* Change our source to the enviroment pointer */
Source = AnsiEnvironment.Buffer;
@@ -156,7 +172,6 @@
{
/* Save a pointer to this token */
*ArgumentList++ = Source;
- DPRINT("NT: envp[%08x]=[%s]\n",Source,Source);
/* Keep looking for another variable */
while (*Source++);
Show replies by date