From 5ede96eff7ab63f264cc57164cf5232316324602 Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Mon, 25 Mar 2002 21:11:13 +0000 Subject: [PATCH] Fixed the length of the command line. svn path=/trunk/; revision=2782 --- reactos/lib/kernel32/process/cmdline.c | 49 +++++++++++++++----------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/reactos/lib/kernel32/process/cmdline.c b/reactos/lib/kernel32/process/cmdline.c index 32f3298c3bc..060237d66aa 100644 --- a/reactos/lib/kernel32/process/cmdline.c +++ b/reactos/lib/kernel32/process/cmdline.c @@ -1,4 +1,4 @@ -/* $Id: cmdline.c,v 1.12 2000/06/29 23:35:26 dwelch Exp $ +/* $Id: cmdline.c,v 1.13 2002/03/25 21:11:13 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries @@ -29,9 +29,6 @@ static UNICODE_STRING CommandLineStringW; static ANSI_STRING CommandLineStringA; -static WCHAR CommandLineW[MAX_PATH]; -static CHAR CommandLineA[MAX_PATH]; - static WINBOOL bCommandLineInitialized = FALSE; @@ -41,26 +38,36 @@ static VOID InitCommandLines (VOID) { PRTL_USER_PROCESS_PARAMETERS Params; - // initialize command line buffers - CommandLineW[0] = 0; - CommandLineStringW.Buffer = CommandLineW; - CommandLineStringW.Length = 0; - CommandLineStringW.MaximumLength = MAX_PATH * sizeof(WCHAR); - - CommandLineA[0] = 0; - CommandLineStringA.Buffer = CommandLineA; - CommandLineStringA.Length = 0; - CommandLineStringA.MaximumLength = MAX_PATH; // get command line Params = NtCurrentPeb()->ProcessParameters; RtlNormalizeProcessParams (Params); + // initialize command line buffers + CommandLineStringW.Length = Params->CommandLine.Length; + CommandLineStringW.MaximumLength = CommandLineStringW.Length + sizeof(WCHAR); + CommandLineStringW.Buffer = RtlAllocateHeap(GetProcessHeap(), + HEAP_GENERATE_EXCEPTIONS|HEAP_ZERO_MEMORY, + CommandLineStringW.MaximumLength); + + RtlInitAnsiString(&CommandLineStringA, NULL); + + // copy command line RtlCopyUnicodeString (&CommandLineStringW, &(Params->CommandLine)); - RtlUnicodeStringToAnsiString (&CommandLineStringA, - &CommandLineStringW, - FALSE); + CommandLineStringW.Buffer[CommandLineStringW.Length / sizeof(WCHAR)] = 0; + + /* convert unicode string to ansi (or oem) */ + if (bIsFileApiAnsi) + RtlUnicodeStringToAnsiString (&CommandLineStringA, + &CommandLineStringW, + TRUE); + else + RtlUnicodeStringToOemString (&CommandLineStringA, + &CommandLineStringW, + TRUE); + + CommandLineStringA.Buffer[CommandLineStringA.Length] = 0; bCommandLineInitialized = TRUE; } @@ -73,9 +80,9 @@ LPSTR STDCALL GetCommandLineA(VOID) InitCommandLines (); } - DPRINT ("CommandLine \'%s\'\n", CommandLineA); + DPRINT ("CommandLine \'%s\'\n", CommandLineStringA.Buffer); - return(CommandLineA); + return(CommandLineStringA.Buffer); } LPWSTR STDCALL GetCommandLineW (VOID) @@ -85,9 +92,9 @@ LPWSTR STDCALL GetCommandLineW (VOID) InitCommandLines (); } - DPRINT ("CommandLine \'%S\'\n", CommandLineW); + DPRINT ("CommandLine \'%S\'\n", CommandLineStringW.Buffer); - return(CommandLineW); + return(CommandLineStringW.Buffer); } /* EOF */