Commit 618cf6fc authored by Martin Fuchs's avatar Martin Fuchs Committed by Alexandre Julliard

Return "file not found" error values instead of E_INVALIDARG if

_ILCreateFromPathA() failed to find files.
parent 1cb0cf4c
......@@ -1616,19 +1616,21 @@ LPITEMIDLIST _ILCreateFromFindDataA(WIN32_FIND_DATAA * stffile )
return pidl;
}
LPITEMIDLIST _ILCreateFromPathA(LPCSTR szPath)
HRESULT _ILCreateFromPathA(LPCSTR szPath, LPITEMIDLIST* ppidl)
{
HANDLE hFile;
WIN32_FIND_DATAA stffile;
LPITEMIDLIST pidl = NULL;
hFile = FindFirstFileA(szPath, &stffile);
if (hFile != INVALID_HANDLE_VALUE)
{
pidl = _ILCreateFromFindDataA(&stffile);
FindClose(hFile);
}
return pidl;
if (hFile == INVALID_HANDLE_VALUE)
return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
FindClose(hFile);
*ppidl = _ILCreateFromFindDataA(&stffile);
return S_OK;
}
LPITEMIDLIST _ILCreateDrive( LPCSTR lpszNew)
......
......@@ -211,7 +211,7 @@ LPITEMIDLIST _ILCreateGuidFromStrA(LPCSTR szGUID);
/* Commonly used PIDLs representing file system objects. */
LPITEMIDLIST _ILCreateDesktop (void);
LPITEMIDLIST _ILCreateFromFindDataA(WIN32_FIND_DATAA *stffile);
LPITEMIDLIST _ILCreateFromPathA (LPCSTR szPath);
HRESULT _ILCreateFromPathA (LPCSTR szPath, LPITEMIDLIST* ppidl);
/* Other helpers */
LPITEMIDLIST _ILCreateMyComputer (void);
......
......@@ -197,7 +197,7 @@ static HRESULT WINAPI ISF_Desktop_fnParseDisplayName (IShellFolder2 * iface,
WCHAR szElement[MAX_PATH];
LPCWSTR szNext = NULL;
LPITEMIDLIST pidlTemp = NULL;
HRESULT hr = E_INVALIDARG;
HRESULT hr = S_OK;
char szPath[MAX_PATH];
DWORD len;
CLSID clsid;
......@@ -234,7 +234,7 @@ static HRESULT WINAPI ISF_Desktop_fnParseDisplayName (IShellFolder2 * iface,
PathAddBackslashA(szPath);
len = lstrlenA(szPath);
WideCharToMultiByte(CP_ACP, 0, lpszDisplayName, -1, szPath + len, MAX_PATH - len, NULL, NULL);
pidlTemp = _ILCreateFromPathA(szPath);
hr = _ILCreateFromPathA(szPath, &pidlTemp);
} else {
pidlTemp = _ILCreateMyComputer();
}
......@@ -242,13 +242,12 @@ static HRESULT WINAPI ISF_Desktop_fnParseDisplayName (IShellFolder2 * iface,
szNext = NULL;
}
if (pidlTemp) {
if (SUCCEEDED(hr) && pidlTemp) {
if (szNext && *szNext) {
hr = SHELL32_ParseNextElement (iface, hwndOwner, pbc, &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
} else {
hr = S_OK;
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);
/* get the pidl */
pidlTemp = _ILCreateFromPathA(szPath);
if (pidlTemp) {
hr = _ILCreateFromPathA(szPath, &pidlTemp);
if (SUCCEEDED(hr)) {
if (szNext && *szNext) {
/* try to analyse the next element */
hr = SHELL32_ParseNextElement (iface, hwndOwner, pbc, &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
} else {
/* it's the last element */
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;
else
*ppidl = NULL;
......@@ -748,11 +748,16 @@ static HRESULT WINAPI IShellFolder_fnSetNameOf (IShellFolder2 * iface, HWND hwnd
szDest[MAX_PATH - 1] = 0;
TRACE ("src=%s dest=%s\n", szSrc, szDest);
if (MoveFileA (szSrc, szDest)) {
HRESULT hr = S_OK;
if (pPidlOut)
*pPidlOut = _ILCreateFromPathA(szDest);
hr = _ILCreateFromPathA(szDest, pPidlOut);
SHChangeNotify (bIsFolder ? SHCNE_RENAMEFOLDER : SHCNE_RENAMEITEM, SHCNF_PATHA, szSrc, szDest);
return S_OK;
return hr;
}
return E_FAIL;
}
......@@ -977,9 +982,11 @@ static HRESULT WINAPI ISFHelper_fnAddFolder (ISFHelper * iface, HWND hwnd, LPCST
bRes = CreateDirectoryA (lpstrNewDir, NULL);
if (bRes) {
SHChangeNotify (SHCNE_MKDIR, SHCNF_PATHA, lpstrNewDir, NULL);
if (ppidlOut)
*ppidlOut = _ILCreateFromPathA(lpstrNewDir);
hres = S_OK;
if (ppidlOut)
hres = _ILCreateFromPathA(lpstrNewDir, ppidlOut);
} else {
char lpstrText[128 + MAX_PATH];
char lpstrTempText[128];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment