Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/***
*wincmdln.c - process command line for WinMain * * Copyright (c) 1997-2001, Microsoft Corporation. All rights reserved. * *Purpose: * Prepare command line to be passed to [w]WinMain. * *Revision History: * 06-23-97 GJF Module created by extracting the code from crt0.c * 03-24-01 PML Protect against null _[aw]cmdln (vs7#229081) * *******************************************************************************/
#include <internal.h>
#include <tchar.h>
#define SPACECHAR _T(' ')
#define DQUOTECHAR _T('\"')
/*
* Flag to ensure multibyte ctype table is only initialized once */ extern int __mbctype_initialized;
/***
*_[w]wincmdln * *Purpose: * Extract the command line tail to be passed to WinMain. * * Be warned! This code was originally implemented by the NT group and * has remained pretty much unchanged since 12-91. It should be changed * only with extreme care since there are undoubtedly many apps which * depend on its historical behavior. * *Entry: * The global variable _[a|w]cmdln is set to point at the complete * command line. * *Exit: * Returns a pointer to the command line tail. * *Exceptions: * *******************************************************************************/
_TUCHAR * __cdecl #ifdef WPRFLAG
_wwincmdln( #else
_wincmdln( #endif
void ) { _TUCHAR *lpszCommandLine;
#ifdef _MBCS
/*
* If necessary, initialize the multibyte ctype table */ if ( __mbctype_initialized == 0 ) __initmbctable(); #endif
/*
* Skip past program name (first token in command line). * Check for and handle quoted program name. */ #ifdef WPRFLAG
lpszCommandLine = _wcmdln == NULL ? L"" : (wchar_t *)_wcmdln; #else
lpszCommandLine = _acmdln == NULL ? "" : (unsigned char *)_acmdln; #endif
if ( *lpszCommandLine == DQUOTECHAR ) { /*
* Scan, and skip over, subsequent characters until * another double-quote or a null is encountered. */
while ( (*(++lpszCommandLine) != DQUOTECHAR) && (*lpszCommandLine != _T('\0')) ) { #ifdef _MBCS
if (_ismbblead(*lpszCommandLine)) lpszCommandLine++; #endif
}
/*
* If we stopped on a double-quote (usual case), skip * over it. */ if ( *lpszCommandLine == DQUOTECHAR ) lpszCommandLine++; } else { while (*lpszCommandLine > SPACECHAR) lpszCommandLine++; }
/*
* Skip past any white space preceeding the second token. */ while (*lpszCommandLine && (*lpszCommandLine <= SPACECHAR)) lpszCommandLine++;
return lpszCommandLine; }
|