mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[SHLWAPI] No need extension to execute '.bat' files CORE-17612 (#4932)
When no extension is provided, add default extension with correct precedence using PathFileExistsDefExtW. - Use PathFindOnPathExW when searching in current directory and PATH environment variable. - Fix Width String terminator to UNICODE_NULL. - Fix all failed tests on PathFindPathExW KVM test. CORE-17612
This commit is contained in:
parent
5c22ce3742
commit
f691efefc2
3 changed files with 8 additions and 25 deletions
|
@ -2321,7 +2321,7 @@ GetSystemDirectoryW(OUT LPWSTR lpBuffer,
|
||||||
RtlCopyMemory(lpBuffer,
|
RtlCopyMemory(lpBuffer,
|
||||||
BaseWindowsSystemDirectory.Buffer,
|
BaseWindowsSystemDirectory.Buffer,
|
||||||
BaseWindowsSystemDirectory.Length);
|
BaseWindowsSystemDirectory.Length);
|
||||||
lpBuffer[BaseWindowsSystemDirectory.Length / sizeof(WCHAR)] = ANSI_NULL;
|
lpBuffer[BaseWindowsSystemDirectory.Length / sizeof(WCHAR)] = UNICODE_NULL;
|
||||||
|
|
||||||
ReturnLength = BaseWindowsSystemDirectory.Length;
|
ReturnLength = BaseWindowsSystemDirectory.Length;
|
||||||
}
|
}
|
||||||
|
@ -2405,7 +2405,7 @@ GetSystemWindowsDirectoryW(OUT LPWSTR lpBuffer,
|
||||||
RtlCopyMemory(lpBuffer,
|
RtlCopyMemory(lpBuffer,
|
||||||
BaseWindowsDirectory.Buffer,
|
BaseWindowsDirectory.Buffer,
|
||||||
BaseWindowsDirectory.Length);
|
BaseWindowsDirectory.Length);
|
||||||
lpBuffer[BaseWindowsDirectory.Length / sizeof(WCHAR)] = ANSI_NULL;
|
lpBuffer[BaseWindowsDirectory.Length / sizeof(WCHAR)] = UNICODE_NULL;
|
||||||
|
|
||||||
ReturnLength = BaseWindowsDirectory.Length;
|
ReturnLength = BaseWindowsDirectory.Length;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2531,6 +2531,8 @@ HRESULT WINAPI ShellExecCmdLine(
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
PCWSTR apPathList[2];
|
||||||
|
|
||||||
pchParams = SplitParams(lpCommand, szFile, _countof(szFile));
|
pchParams = SplitParams(lpCommand, szFile, _countof(szFile));
|
||||||
if (szFile[0] != UNICODE_NULL && szFile[1] == L':' &&
|
if (szFile[0] != UNICODE_NULL && szFile[1] == L':' &&
|
||||||
szFile[2] == UNICODE_NULL)
|
szFile[2] == UNICODE_NULL)
|
||||||
|
@ -2551,30 +2553,10 @@ HRESULT WINAPI ShellExecCmdLine(
|
||||||
{
|
{
|
||||||
StringCchCopyW(szFile, _countof(szFile), szFile2);
|
StringCchCopyW(szFile, _countof(szFile), szFile2);
|
||||||
}
|
}
|
||||||
else if (SearchPathW(NULL, szFile, NULL, _countof(szFile2), szFile2, NULL) ||
|
|
||||||
SearchPathW(NULL, szFile, L".exe", _countof(szFile2), szFile2, NULL) ||
|
|
||||||
SearchPathW(NULL, szFile, L".com", _countof(szFile2), szFile2, NULL) ||
|
|
||||||
SearchPathW(pwszStartDir, szFile, NULL, _countof(szFile2), szFile2, NULL) ||
|
|
||||||
SearchPathW(pwszStartDir, szFile, L".exe", _countof(szFile2), szFile2, NULL) ||
|
|
||||||
SearchPathW(pwszStartDir, szFile, L".com", _countof(szFile2), szFile2, NULL))
|
|
||||||
{
|
|
||||||
StringCchCopyW(szFile, _countof(szFile), szFile2);
|
|
||||||
}
|
|
||||||
else if (SearchPathW(NULL, lpCommand, NULL, _countof(szFile2), szFile2, NULL) ||
|
|
||||||
SearchPathW(NULL, lpCommand, L".exe", _countof(szFile2), szFile2, NULL) ||
|
|
||||||
SearchPathW(NULL, lpCommand, L".com", _countof(szFile2), szFile2, NULL) ||
|
|
||||||
SearchPathW(pwszStartDir, lpCommand, NULL, _countof(szFile2), szFile2, NULL) ||
|
|
||||||
SearchPathW(pwszStartDir, lpCommand, L".exe", _countof(szFile2), szFile2, NULL) ||
|
|
||||||
SearchPathW(pwszStartDir, lpCommand, L".com", _countof(szFile2), szFile2, NULL))
|
|
||||||
{
|
|
||||||
StringCchCopyW(szFile, _countof(szFile), szFile2);
|
|
||||||
pchParams = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pwszStartDir)
|
apPathList[0] = pwszStartDir;
|
||||||
{
|
apPathList[1] = NULL;
|
||||||
SetCurrentDirectoryW(szCurDir);
|
PathFindOnPathExW(szFile, apPathList, WHICH_DEFAULT);
|
||||||
}
|
|
||||||
|
|
||||||
if (!(dwSeclFlags & SECL_ALLOW_NONEXE))
|
if (!(dwSeclFlags & SECL_ALLOW_NONEXE))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1151,6 +1151,7 @@ BOOL WINAPI PathFileExistsDefExtW(LPWSTR lpszPath,DWORD dwWhich)
|
||||||
#ifdef __REACTOS__
|
#ifdef __REACTOS__
|
||||||
if (dwWhich & 0x1)
|
if (dwWhich & 0x1)
|
||||||
{
|
{
|
||||||
|
if (GetFileAttributes(lpszPath) != FILE_ATTRIBUTE_DIRECTORY)
|
||||||
#endif
|
#endif
|
||||||
lstrcpyW(lpszPath + iLen, pszExts[iChoose]);
|
lstrcpyW(lpszPath + iLen, pszExts[iChoose]);
|
||||||
if (PathFileExistsW(lpszPath))
|
if (PathFileExistsW(lpszPath))
|
||||||
|
|
Loading…
Reference in a new issue