cmd: cmd /c "pgmname" searches all extensions on PATHEXT.
This commit is contained in:
parent
50bdb257f9
commit
25cf0aa046
|
@ -60,7 +60,7 @@ var=33@space@
|
||||||
@todo_wine@4@space@
|
@todo_wine@4@space@
|
||||||
------ Testing invocation with CMD /C -------------
|
------ Testing invocation with CMD /C -------------
|
||||||
0@space@
|
0@space@
|
||||||
@todo_wine@1@space@
|
1@space@
|
||||||
@todo_wine@0@space@
|
@todo_wine@0@space@
|
||||||
0@space@
|
0@space@
|
||||||
@todo_wine@1@space@
|
@todo_wine@1@space@
|
||||||
|
@ -74,7 +74,7 @@ var=33@space@
|
||||||
"hi"
|
"hi"
|
||||||
@todo_wine@1@space@
|
@todo_wine@1@space@
|
||||||
"\"\\"\\\"\\\\"@space@"\"\\"\\\"\\\\"
|
"\"\\"\\\"\\\\"@space@"\"\\"\\\"\\\\"
|
||||||
@todo_wine@1@space@
|
1@space@
|
||||||
0@space@
|
0@space@
|
||||||
1@space@
|
1@space@
|
||||||
0@space@
|
0@space@
|
||||||
|
@ -85,10 +85,10 @@ var=33@space@
|
||||||
2@space@
|
2@space@
|
||||||
2@space@
|
2@space@
|
||||||
0@space@
|
0@space@
|
||||||
@todo_wine@5@space@
|
5@space@
|
||||||
------- Testing CMD /C qualifier treatment ------------
|
------- Testing CMD /C qualifier treatment ------------
|
||||||
0@space@
|
0@space@
|
||||||
@todo_wine@1@space@
|
1@space@
|
||||||
THIS FAILS: cmd "/c"say one
|
THIS FAILS: cmd "/c"say one
|
||||||
THIS FAILS: cmd ignoreme/c say one
|
THIS FAILS: cmd ignoreme/c say one
|
||||||
--------- Testing special characters --------------
|
--------- Testing special characters --------------
|
||||||
|
|
|
@ -47,6 +47,11 @@ BOOL echo_mode = TRUE;
|
||||||
WCHAR anykey[100], version_string[100];
|
WCHAR anykey[100], version_string[100];
|
||||||
const WCHAR newlineW[] = {'\r','\n','\0'};
|
const WCHAR newlineW[] = {'\r','\n','\0'};
|
||||||
const WCHAR spaceW[] = {' ','\0'};
|
const WCHAR spaceW[] = {' ','\0'};
|
||||||
|
static const WCHAR envPathExt[] = {'P','A','T','H','E','X','T','\0'};
|
||||||
|
static const WCHAR dfltPathExt[] = {'.','b','a','t',';',
|
||||||
|
'.','c','o','m',';',
|
||||||
|
'.','c','m','d',';',
|
||||||
|
'.','e','x','e','\0'};
|
||||||
|
|
||||||
static BOOL opt_c, opt_k, opt_s, unicodeOutput = FALSE;
|
static BOOL opt_c, opt_k, opt_s, unicodeOutput = FALSE;
|
||||||
|
|
||||||
|
@ -1009,7 +1014,6 @@ void WCMD_run_program (WCHAR *command, BOOL called)
|
||||||
BOOL assumeInternal = FALSE;
|
BOOL assumeInternal = FALSE;
|
||||||
DWORD len;
|
DWORD len;
|
||||||
static const WCHAR envPath[] = {'P','A','T','H','\0'};
|
static const WCHAR envPath[] = {'P','A','T','H','\0'};
|
||||||
static const WCHAR envPathExt[] = {'P','A','T','H','E','X','T','\0'};
|
|
||||||
static const WCHAR delims[] = {'/','\\',':','\0'};
|
static const WCHAR delims[] = {'/','\\',':','\0'};
|
||||||
|
|
||||||
/* Quick way to get the filename
|
/* Quick way to get the filename
|
||||||
|
@ -1055,10 +1059,6 @@ void WCMD_run_program (WCHAR *command, BOOL called)
|
||||||
/* Now extract PATHEXT */
|
/* Now extract PATHEXT */
|
||||||
len = GetEnvironmentVariableW(envPathExt, pathext, sizeof(pathext)/sizeof(WCHAR));
|
len = GetEnvironmentVariableW(envPathExt, pathext, sizeof(pathext)/sizeof(WCHAR));
|
||||||
if ((len == 0) || (len >= (sizeof(pathext)/sizeof(WCHAR)))) {
|
if ((len == 0) || (len >= (sizeof(pathext)/sizeof(WCHAR)))) {
|
||||||
static const WCHAR dfltPathExt[] = {'.','b','a','t',';',
|
|
||||||
'.','c','o','m',';',
|
|
||||||
'.','c','m','d',';',
|
|
||||||
'.','e','x','e','\0'};
|
|
||||||
strcpyW (pathext, dfltPathExt);
|
strcpyW (pathext, dfltPathExt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2445,10 +2445,15 @@ int wmain (int argc, WCHAR *argvW[])
|
||||||
is a valid executable, ie must exist, otherwise drop back to old mode */
|
is a valid executable, ie must exist, otherwise drop back to old mode */
|
||||||
if (!opt_s) {
|
if (!opt_s) {
|
||||||
WCHAR *thisArg = WCMD_parameter(cmd, 0, NULL, NULL, FALSE);
|
WCHAR *thisArg = WCMD_parameter(cmd, 0, NULL, NULL, FALSE);
|
||||||
static const WCHAR extEXEW[] = {'.','e','x','e','\0'};
|
WCHAR pathext[MAXSTRING];
|
||||||
static const WCHAR extCOMW[] = {'.','c','o','m','\0'};
|
|
||||||
BOOL found = FALSE;
|
BOOL found = FALSE;
|
||||||
|
|
||||||
|
/* Now extract PATHEXT */
|
||||||
|
len = GetEnvironmentVariableW(envPathExt, pathext, sizeof(pathext)/sizeof(WCHAR));
|
||||||
|
if ((len == 0) || (len >= (sizeof(pathext)/sizeof(WCHAR)))) {
|
||||||
|
strcpyW (pathext, dfltPathExt);
|
||||||
|
}
|
||||||
|
|
||||||
/* If the supplied parameter has any directory information, look there */
|
/* If the supplied parameter has any directory information, look there */
|
||||||
WINE_TRACE("First parameter is '%s'\n", wine_dbgstr_w(thisArg));
|
WINE_TRACE("First parameter is '%s'\n", wine_dbgstr_w(thisArg));
|
||||||
if (strchrW(thisArg, '\\') != NULL) {
|
if (strchrW(thisArg, '\\') != NULL) {
|
||||||
|
@ -2461,18 +2466,28 @@ int wmain (int argc, WCHAR *argvW[])
|
||||||
if (GetFileAttributesW(string) != INVALID_FILE_ATTRIBUTES) {
|
if (GetFileAttributesW(string) != INVALID_FILE_ATTRIBUTES) {
|
||||||
WINE_TRACE("Found file as '%s'\n", wine_dbgstr_w(string));
|
WINE_TRACE("Found file as '%s'\n", wine_dbgstr_w(string));
|
||||||
found = TRUE;
|
found = TRUE;
|
||||||
} else strcpyW(p, extEXEW);
|
} else {
|
||||||
|
WCHAR *thisExt = pathext;
|
||||||
|
|
||||||
/* Does file exist with .exe appended */
|
/* No - try with each of the PATHEXT extensions */
|
||||||
if (!found && GetFileAttributesW(string) != INVALID_FILE_ATTRIBUTES) {
|
while (!found && thisExt) {
|
||||||
WINE_TRACE("Found file as '%s'\n", wine_dbgstr_w(string));
|
WCHAR *nextExt = strchrW(thisExt, ';');
|
||||||
found = TRUE;
|
|
||||||
} else strcpyW(p, extCOMW);
|
|
||||||
|
|
||||||
/* Does file exist with .com appended */
|
if (nextExt) {
|
||||||
if (!found && GetFileAttributesW(string) != INVALID_FILE_ATTRIBUTES) {
|
memcpy(p, thisExt, (nextExt-thisExt) * sizeof(WCHAR));
|
||||||
WINE_TRACE("Found file as '%s'\n", wine_dbgstr_w(string));
|
p[(nextExt-thisExt)] = 0x00;
|
||||||
found = TRUE;
|
thisExt = nextExt+1;
|
||||||
|
} else {
|
||||||
|
strcpyW(p, thisExt);
|
||||||
|
thisExt = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Does file exist with this extension appended? */
|
||||||
|
if (GetFileAttributesW(string) != INVALID_FILE_ATTRIBUTES) {
|
||||||
|
WINE_TRACE("Found file as '%s'\n", wine_dbgstr_w(string));
|
||||||
|
found = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Otherwise we now need to look in the path to see if we can find it */
|
/* Otherwise we now need to look in the path to see if we can find it */
|
||||||
|
@ -2483,18 +2498,28 @@ int wmain (int argc, WCHAR *argvW[])
|
||||||
if (SearchPathW(NULL, thisArg, NULL, sizeof(string)/sizeof(WCHAR), string, NULL) != 0) {
|
if (SearchPathW(NULL, thisArg, NULL, sizeof(string)/sizeof(WCHAR), string, NULL) != 0) {
|
||||||
WINE_TRACE("Found on path as '%s'\n", wine_dbgstr_w(string));
|
WINE_TRACE("Found on path as '%s'\n", wine_dbgstr_w(string));
|
||||||
found = TRUE;
|
found = TRUE;
|
||||||
}
|
} else {
|
||||||
|
WCHAR *thisExt = pathext;
|
||||||
|
|
||||||
/* Does file exist plus an extension of .exe? */
|
/* No - try with each of the PATHEXT extensions */
|
||||||
if (SearchPathW(NULL, thisArg, extEXEW, sizeof(string)/sizeof(WCHAR), string, NULL) != 0) {
|
while (!found && thisExt) {
|
||||||
WINE_TRACE("Found on path as '%s'\n", wine_dbgstr_w(string));
|
WCHAR *nextExt = strchrW(thisExt, ';');
|
||||||
found = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Does file exist plus an extension of .com? */
|
if (nextExt) {
|
||||||
if (SearchPathW(NULL, thisArg, extCOMW, sizeof(string)/sizeof(WCHAR), string, NULL) != 0) {
|
*nextExt = 0;
|
||||||
WINE_TRACE("Found on path as '%s'\n", wine_dbgstr_w(string));
|
nextExt = nextExt+1;
|
||||||
found = TRUE;
|
} else {
|
||||||
|
nextExt = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Does file exist with this extension? */
|
||||||
|
if (SearchPathW(NULL, thisArg, thisExt, sizeof(string)/sizeof(WCHAR), string, NULL) != 0) {
|
||||||
|
WINE_TRACE("Found on path as '%s' with extension '%s'\n", wine_dbgstr_w(string),
|
||||||
|
wine_dbgstr_w(thisExt));
|
||||||
|
found = TRUE;
|
||||||
|
}
|
||||||
|
thisExt = nextExt;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue