mirror of
https://github.com/reactos/reactos.git
synced 2025-04-27 17:10:22 +00:00
Use compsec instead of "cmd" when trying to find cmd.exe
svn path=/trunk/; revision=17872
This commit is contained in:
parent
30aad7b52a
commit
b494052296
1 changed files with 34 additions and 16 deletions
|
@ -23,6 +23,8 @@ INT cmd_start (LPTSTR First, LPTSTR Rest)
|
||||||
TCHAR first[CMDLINE_LENGTH];
|
TCHAR first[CMDLINE_LENGTH];
|
||||||
TCHAR *rest = NULL;
|
TCHAR *rest = NULL;
|
||||||
TCHAR *param = NULL;
|
TCHAR *param = NULL;
|
||||||
|
INT size;
|
||||||
|
LPTSTR comspec;
|
||||||
BOOL bWait = FALSE;
|
BOOL bWait = FALSE;
|
||||||
BOOL bBat = FALSE;
|
BOOL bBat = FALSE;
|
||||||
BOOL bCreate = FALSE;
|
BOOL bCreate = FALSE;
|
||||||
|
@ -38,12 +40,39 @@ INT cmd_start (LPTSTR First, LPTSTR Rest)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* get comspec */
|
||||||
|
comspec = malloc ( MAX_PATH * sizeof(TCHAR));
|
||||||
|
if (comspec == NULL)
|
||||||
|
{
|
||||||
|
error_out_of_memory();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
SetLastError(0);
|
||||||
|
size = GetEnvironmentVariable (_T("COMSPEC"), comspec, 512);
|
||||||
|
if(GetLastError() == ERROR_ENVVAR_NOT_FOUND)
|
||||||
|
{
|
||||||
|
Rest = _T("cmd");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (size > MAX_PATH)
|
||||||
|
{
|
||||||
|
comspec = realloc(comspec,size * sizeof(TCHAR) );
|
||||||
|
if (comspec==NULL)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
size = GetEnvironmentVariable (_T("COMSPEC"), comspec, size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nErrorLevel = 0;
|
nErrorLevel = 0;
|
||||||
|
|
||||||
if( !*Rest )
|
if( !*Rest )
|
||||||
{
|
{
|
||||||
// FIXME: use comspec instead
|
_tcscpy(Rest,_T("\""));
|
||||||
Rest = _T("cmd");
|
_tcscat(Rest,comspec);
|
||||||
|
_tcscat(Rest,_T("\""));
|
||||||
}
|
}
|
||||||
|
|
||||||
rest = malloc ( _tcslen(Rest) + 1 * sizeof(TCHAR));
|
rest = malloc ( _tcslen(Rest) + 1 * sizeof(TCHAR));
|
||||||
|
@ -158,19 +187,8 @@ INT cmd_start (LPTSTR First, LPTSTR Rest)
|
||||||
bBat = TRUE;
|
bBat = TRUE;
|
||||||
memset(szFullCmdLine,0,CMDLINE_LENGTH * sizeof(TCHAR));
|
memset(szFullCmdLine,0,CMDLINE_LENGTH * sizeof(TCHAR));
|
||||||
|
|
||||||
/* FIXME : use comspec instead */
|
|
||||||
if (!SearchForExecutable (_T("CMD"), szFullCmdLine))
|
|
||||||
{
|
|
||||||
error_bad_command ();
|
|
||||||
|
|
||||||
if (rest != NULL)
|
_tcscpy(szFullCmdLine,comspec);
|
||||||
free(rest);
|
|
||||||
|
|
||||||
if (param != NULL)
|
|
||||||
free(param);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(&szFullCmdLine[_tcslen(szFullCmdLine)],_T("\" /K \""), 6 * sizeof(TCHAR));
|
memcpy(&szFullCmdLine[_tcslen(szFullCmdLine)],_T("\" /K \""), 6 * sizeof(TCHAR));
|
||||||
memcpy(&szFullCmdLine[_tcslen(szFullCmdLine)], szFullName, _tcslen(szFullName) * sizeof(TCHAR));
|
memcpy(&szFullCmdLine[_tcslen(szFullCmdLine)], szFullName, _tcslen(szFullName) * sizeof(TCHAR));
|
||||||
|
|
Loading…
Reference in a new issue