cmd: Identify the program name using more appropriate parsing.
This commit is contained in:
parent
25cf0aa046
commit
4236c2007d
|
@ -48,37 +48,37 @@ var=33@space@
|
||||||
------ Testing invocation of batch files ----------
|
------ Testing invocation of batch files ----------
|
||||||
0@space@
|
0@space@
|
||||||
1@space@
|
1@space@
|
||||||
@todo_wine@1@space@
|
|
||||||
1@space@
|
1@space@
|
||||||
@todo_wine@1@space@
|
1@space@
|
||||||
|
1@space@
|
||||||
0@space@
|
0@space@
|
||||||
@todo_wine@1@space@
|
1@space@
|
||||||
@todo_wine@2@space@
|
2@space@
|
||||||
0@space@
|
0@space@
|
||||||
3@space@
|
3@space@
|
||||||
@todo_wine@3@space@
|
3@space@
|
||||||
@todo_wine@4@space@
|
@todo_wine@4@space@
|
||||||
------ Testing invocation with CMD /C -------------
|
------ Testing invocation with CMD /C -------------
|
||||||
0@space@
|
0@space@
|
||||||
1@space@
|
1@space@
|
||||||
@todo_wine@0@space@
|
|
||||||
0@space@
|
0@space@
|
||||||
@todo_wine@1@space@
|
|
||||||
0@space@
|
0@space@
|
||||||
@todo_wine@1@space@
|
1@space@
|
||||||
@todo_wine@2@space@
|
|
||||||
0@space@
|
0@space@
|
||||||
@todo_wine@3@space@
|
1@space@
|
||||||
|
2@space@
|
||||||
|
0@space@
|
||||||
|
3@space@
|
||||||
@todo_wine@4@space@
|
@todo_wine@4@space@
|
||||||
---------- Testing CMD /C quoting -----------------
|
---------- Testing CMD /C quoting -----------------
|
||||||
"hi"
|
"hi"
|
||||||
@todo_wine@1@space@
|
1@space@
|
||||||
"\"\\"\\\"\\\\"@space@"\"\\"\\\"\\\\"
|
"\"\\"\\\"\\\\"@space@"\"\\"\\\"\\\\"
|
||||||
1@space@
|
1@space@
|
||||||
0@space@
|
0@space@
|
||||||
1@space@
|
1@space@
|
||||||
0@space@
|
0@space@
|
||||||
@todo_wine@0@space@
|
0@space@
|
||||||
0@space@@or_broken@3@space@
|
0@space@@or_broken@3@space@
|
||||||
3@space@
|
3@space@
|
||||||
2@space@
|
2@space@
|
||||||
|
@ -100,7 +100,7 @@ THIS FAILS: cmd ignoreme/c say one
|
||||||
{@space@
|
{@space@
|
||||||
}@space@
|
}@space@
|
||||||
0@space@
|
0@space@
|
||||||
@todo_wine@0@space@
|
0@space@
|
||||||
!@space@
|
!@space@
|
||||||
@todo_wine@0@space@@or_broken@!@space@
|
@todo_wine@0@space@@or_broken@!@space@
|
||||||
@todo_wine@0@space@
|
@todo_wine@0@space@
|
||||||
|
@ -117,8 +117,8 @@ THIS FAILS: cmd ignoreme/c say one
|
||||||
@todo_wine@1:((1)),2:@space@
|
@todo_wine@1:((1)),2:@space@
|
||||||
@todo_wine@1:(1)(2),2:@space@
|
@todo_wine@1:(1)(2),2:@space@
|
||||||
@todo_wine@1:(1),2:(2)@space@
|
@todo_wine@1:(1),2:(2)@space@
|
||||||
@todo_wine@1:1,2:2@space@
|
1:1,2:2@space@
|
||||||
@todo_wine@1:1,2:2@space@
|
1:1,2:2@space@
|
||||||
@todo_wine@1:1,2:2@space@
|
1:1,2:2@space@
|
||||||
1:"p@space@"1,2:p"@space@"2@space@
|
1:"p@space@"1,2:p"@space@"2@space@
|
||||||
1:p"1@space@p",2:2@space@
|
1:p"1@space@p",2:2@space@
|
||||||
|
|
|
@ -1008,6 +1008,7 @@ void WCMD_run_program (WCHAR *command, BOOL called)
|
||||||
MAX_PATH, including null character */
|
MAX_PATH, including null character */
|
||||||
WCHAR *lastSlash;
|
WCHAR *lastSlash;
|
||||||
WCHAR pathext[MAXSTRING];
|
WCHAR pathext[MAXSTRING];
|
||||||
|
WCHAR *firstParam;
|
||||||
BOOL extensionsupplied = FALSE;
|
BOOL extensionsupplied = FALSE;
|
||||||
BOOL launched = FALSE;
|
BOOL launched = FALSE;
|
||||||
BOOL status;
|
BOOL status;
|
||||||
|
@ -1016,17 +1017,13 @@ void WCMD_run_program (WCHAR *command, BOOL called)
|
||||||
static const WCHAR envPath[] = {'P','A','T','H','\0'};
|
static const WCHAR envPath[] = {'P','A','T','H','\0'};
|
||||||
static const WCHAR delims[] = {'/','\\',':','\0'};
|
static const WCHAR delims[] = {'/','\\',':','\0'};
|
||||||
|
|
||||||
/* Quick way to get the filename
|
/* Quick way to get the filename is to extract the first argument. */
|
||||||
* (but handle leading / as part of program name, not qualifier)
|
WINE_TRACE("Running '%s' (%d)\n", wine_dbgstr_w(command), called);
|
||||||
*/
|
firstParam = WCMD_parameter(command, 0, NULL, NULL, FALSE);
|
||||||
for (len = 0; command[len] == '/'; len++) param1[len] = '/';
|
if (!firstParam) return;
|
||||||
WCMD_parse (command + len, quals, param1 + len, param2);
|
|
||||||
|
|
||||||
if (!(*param1) && !(*param2))
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Calculate the search path and stem to search for */
|
/* Calculate the search path and stem to search for */
|
||||||
if (strpbrkW (param1, delims) == NULL) { /* No explicit path given, search path */
|
if (strpbrkW (firstParam, delims) == NULL) { /* No explicit path given, search path */
|
||||||
static const WCHAR curDir[] = {'.',';','\0'};
|
static const WCHAR curDir[] = {'.',';','\0'};
|
||||||
strcpyW(pathtosearch, curDir);
|
strcpyW(pathtosearch, curDir);
|
||||||
len = GetEnvironmentVariableW(envPath, &pathtosearch[2], (sizeof(pathtosearch)/sizeof(WCHAR))-2);
|
len = GetEnvironmentVariableW(envPath, &pathtosearch[2], (sizeof(pathtosearch)/sizeof(WCHAR))-2);
|
||||||
|
@ -1034,19 +1031,19 @@ void WCMD_run_program (WCHAR *command, BOOL called)
|
||||||
static const WCHAR curDir[] = {'.','\0'};
|
static const WCHAR curDir[] = {'.','\0'};
|
||||||
strcpyW (pathtosearch, curDir);
|
strcpyW (pathtosearch, curDir);
|
||||||
}
|
}
|
||||||
if (strchrW(param1, '.') != NULL) extensionsupplied = TRUE;
|
if (strchrW(firstParam, '.') != NULL) extensionsupplied = TRUE;
|
||||||
if (strlenW(param1) >= MAX_PATH)
|
if (strlenW(firstParam) >= MAX_PATH)
|
||||||
{
|
{
|
||||||
WCMD_output_asis_stderr(WCMD_LoadMessage(WCMD_LINETOOLONG));
|
WCMD_output_asis_stderr(WCMD_LoadMessage(WCMD_LINETOOLONG));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpyW(stemofsearch, param1);
|
strcpyW(stemofsearch, firstParam);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
/* Convert eg. ..\fred to include a directory by removing file part */
|
/* Convert eg. ..\fred to include a directory by removing file part */
|
||||||
GetFullPathNameW(param1, sizeof(pathtosearch)/sizeof(WCHAR), pathtosearch, NULL);
|
GetFullPathNameW(firstParam, sizeof(pathtosearch)/sizeof(WCHAR), pathtosearch, NULL);
|
||||||
lastSlash = strrchrW(pathtosearch, '\\');
|
lastSlash = strrchrW(pathtosearch, '\\');
|
||||||
if (lastSlash && strchrW(lastSlash, '.') != NULL) extensionsupplied = TRUE;
|
if (lastSlash && strchrW(lastSlash, '.') != NULL) extensionsupplied = TRUE;
|
||||||
strcpyW(stemofsearch, lastSlash+1);
|
strcpyW(stemofsearch, lastSlash+1);
|
||||||
|
|
Loading…
Reference in New Issue