Return "file not found" error values instead of E_INVALIDARG if
_ILCreateFromPathA() failed to find files.
This commit is contained in:
parent
1cb0cf4ced
commit
618cf6fc0f
|
@ -1616,19 +1616,21 @@ LPITEMIDLIST _ILCreateFromFindDataA(WIN32_FIND_DATAA * stffile )
|
||||||
return pidl;
|
return pidl;
|
||||||
}
|
}
|
||||||
|
|
||||||
LPITEMIDLIST _ILCreateFromPathA(LPCSTR szPath)
|
HRESULT _ILCreateFromPathA(LPCSTR szPath, LPITEMIDLIST* ppidl)
|
||||||
{
|
{
|
||||||
HANDLE hFile;
|
HANDLE hFile;
|
||||||
WIN32_FIND_DATAA stffile;
|
WIN32_FIND_DATAA stffile;
|
||||||
LPITEMIDLIST pidl = NULL;
|
|
||||||
|
|
||||||
hFile = FindFirstFileA(szPath, &stffile);
|
hFile = FindFirstFileA(szPath, &stffile);
|
||||||
if (hFile != INVALID_HANDLE_VALUE)
|
|
||||||
{
|
if (hFile == INVALID_HANDLE_VALUE)
|
||||||
pidl = _ILCreateFromFindDataA(&stffile);
|
return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
|
||||||
FindClose(hFile);
|
|
||||||
}
|
FindClose(hFile);
|
||||||
return pidl;
|
|
||||||
|
*ppidl = _ILCreateFromFindDataA(&stffile);
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
LPITEMIDLIST _ILCreateDrive( LPCSTR lpszNew)
|
LPITEMIDLIST _ILCreateDrive( LPCSTR lpszNew)
|
||||||
|
|
|
@ -211,7 +211,7 @@ LPITEMIDLIST _ILCreateGuidFromStrA(LPCSTR szGUID);
|
||||||
/* Commonly used PIDLs representing file system objects. */
|
/* Commonly used PIDLs representing file system objects. */
|
||||||
LPITEMIDLIST _ILCreateDesktop (void);
|
LPITEMIDLIST _ILCreateDesktop (void);
|
||||||
LPITEMIDLIST _ILCreateFromFindDataA(WIN32_FIND_DATAA *stffile);
|
LPITEMIDLIST _ILCreateFromFindDataA(WIN32_FIND_DATAA *stffile);
|
||||||
LPITEMIDLIST _ILCreateFromPathA (LPCSTR szPath);
|
HRESULT _ILCreateFromPathA (LPCSTR szPath, LPITEMIDLIST* ppidl);
|
||||||
|
|
||||||
/* Other helpers */
|
/* Other helpers */
|
||||||
LPITEMIDLIST _ILCreateMyComputer (void);
|
LPITEMIDLIST _ILCreateMyComputer (void);
|
||||||
|
|
|
@ -197,7 +197,7 @@ static HRESULT WINAPI ISF_Desktop_fnParseDisplayName (IShellFolder2 * iface,
|
||||||
WCHAR szElement[MAX_PATH];
|
WCHAR szElement[MAX_PATH];
|
||||||
LPCWSTR szNext = NULL;
|
LPCWSTR szNext = NULL;
|
||||||
LPITEMIDLIST pidlTemp = NULL;
|
LPITEMIDLIST pidlTemp = NULL;
|
||||||
HRESULT hr = E_INVALIDARG;
|
HRESULT hr = S_OK;
|
||||||
char szPath[MAX_PATH];
|
char szPath[MAX_PATH];
|
||||||
DWORD len;
|
DWORD len;
|
||||||
CLSID clsid;
|
CLSID clsid;
|
||||||
|
@ -234,7 +234,7 @@ static HRESULT WINAPI ISF_Desktop_fnParseDisplayName (IShellFolder2 * iface,
|
||||||
PathAddBackslashA(szPath);
|
PathAddBackslashA(szPath);
|
||||||
len = lstrlenA(szPath);
|
len = lstrlenA(szPath);
|
||||||
WideCharToMultiByte(CP_ACP, 0, lpszDisplayName, -1, szPath + len, MAX_PATH - len, NULL, NULL);
|
WideCharToMultiByte(CP_ACP, 0, lpszDisplayName, -1, szPath + len, MAX_PATH - len, NULL, NULL);
|
||||||
pidlTemp = _ILCreateFromPathA(szPath);
|
hr = _ILCreateFromPathA(szPath, &pidlTemp);
|
||||||
} else {
|
} else {
|
||||||
pidlTemp = _ILCreateMyComputer();
|
pidlTemp = _ILCreateMyComputer();
|
||||||
}
|
}
|
||||||
|
@ -242,13 +242,12 @@ static HRESULT WINAPI ISF_Desktop_fnParseDisplayName (IShellFolder2 * iface,
|
||||||
szNext = NULL;
|
szNext = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pidlTemp) {
|
if (SUCCEEDED(hr) && pidlTemp) {
|
||||||
if (szNext && *szNext) {
|
if (szNext && *szNext) {
|
||||||
hr = SHELL32_ParseNextElement (iface, hwndOwner, pbc, &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
|
hr = SHELL32_ParseNextElement (iface, hwndOwner, pbc, &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
|
||||||
} else {
|
} else {
|
||||||
hr = S_OK;
|
|
||||||
if (pdwAttributes && *pdwAttributes) {
|
if (pdwAttributes && *pdwAttributes) {
|
||||||
SHELL32_GetItemAttributes (_IShellFolder_ (This), pidlTemp, pdwAttributes);
|
hr = SHELL32_GetItemAttributes (_IShellFolder_ (This), pidlTemp, pdwAttributes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -353,22 +353,22 @@ IShellFolder_fnParseDisplayName (IShellFolder2 * iface,
|
||||||
WideCharToMultiByte(CP_ACP, 0, szElement, -1, szPath + len, MAX_PATH - len, NULL, NULL);
|
WideCharToMultiByte(CP_ACP, 0, szElement, -1, szPath + len, MAX_PATH - len, NULL, NULL);
|
||||||
|
|
||||||
/* get the pidl */
|
/* get the pidl */
|
||||||
pidlTemp = _ILCreateFromPathA(szPath);
|
hr = _ILCreateFromPathA(szPath, &pidlTemp);
|
||||||
if (pidlTemp) {
|
|
||||||
|
if (SUCCEEDED(hr)) {
|
||||||
if (szNext && *szNext) {
|
if (szNext && *szNext) {
|
||||||
/* try to analyse the next element */
|
/* try to analyse the next element */
|
||||||
hr = SHELL32_ParseNextElement (iface, hwndOwner, pbc, &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
|
hr = SHELL32_ParseNextElement (iface, hwndOwner, pbc, &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
|
||||||
} else {
|
} else {
|
||||||
/* it's the last element */
|
/* it's the last element */
|
||||||
if (pdwAttributes && *pdwAttributes) {
|
if (pdwAttributes && *pdwAttributes) {
|
||||||
SHELL32_GetItemAttributes (_IShellFolder_ (This), pidlTemp, pdwAttributes);
|
hr = SHELL32_GetItemAttributes (_IShellFolder_ (This), pidlTemp, pdwAttributes);
|
||||||
}
|
}
|
||||||
hr = S_OK;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hr)
|
if (SUCCEEDED(hr))
|
||||||
*ppidl = pidlTemp;
|
*ppidl = pidlTemp;
|
||||||
else
|
else
|
||||||
*ppidl = NULL;
|
*ppidl = NULL;
|
||||||
|
@ -748,11 +748,16 @@ static HRESULT WINAPI IShellFolder_fnSetNameOf (IShellFolder2 * iface, HWND hwnd
|
||||||
szDest[MAX_PATH - 1] = 0;
|
szDest[MAX_PATH - 1] = 0;
|
||||||
TRACE ("src=%s dest=%s\n", szSrc, szDest);
|
TRACE ("src=%s dest=%s\n", szSrc, szDest);
|
||||||
if (MoveFileA (szSrc, szDest)) {
|
if (MoveFileA (szSrc, szDest)) {
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
if (pPidlOut)
|
if (pPidlOut)
|
||||||
*pPidlOut = _ILCreateFromPathA(szDest);
|
hr = _ILCreateFromPathA(szDest, pPidlOut);
|
||||||
|
|
||||||
SHChangeNotify (bIsFolder ? SHCNE_RENAMEFOLDER : SHCNE_RENAMEITEM, SHCNF_PATHA, szSrc, szDest);
|
SHChangeNotify (bIsFolder ? SHCNE_RENAMEFOLDER : SHCNE_RENAMEITEM, SHCNF_PATHA, szSrc, szDest);
|
||||||
return S_OK;
|
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -977,9 +982,11 @@ static HRESULT WINAPI ISFHelper_fnAddFolder (ISFHelper * iface, HWND hwnd, LPCST
|
||||||
bRes = CreateDirectoryA (lpstrNewDir, NULL);
|
bRes = CreateDirectoryA (lpstrNewDir, NULL);
|
||||||
if (bRes) {
|
if (bRes) {
|
||||||
SHChangeNotify (SHCNE_MKDIR, SHCNF_PATHA, lpstrNewDir, NULL);
|
SHChangeNotify (SHCNE_MKDIR, SHCNF_PATHA, lpstrNewDir, NULL);
|
||||||
if (ppidlOut)
|
|
||||||
*ppidlOut = _ILCreateFromPathA(lpstrNewDir);
|
|
||||||
hres = S_OK;
|
hres = S_OK;
|
||||||
|
|
||||||
|
if (ppidlOut)
|
||||||
|
hres = _ILCreateFromPathA(lpstrNewDir, ppidlOut);
|
||||||
} else {
|
} else {
|
||||||
char lpstrText[128 + MAX_PATH];
|
char lpstrText[128 + MAX_PATH];
|
||||||
char lpstrTempText[128];
|
char lpstrTempText[128];
|
||||||
|
|
Loading…
Reference in New Issue