shell32 - file not found [new version]
Martin Fuchs
martin-fuchs at gmx.net
Wed Apr 14 13:24:16 CDT 2004
Now using Juan's proposed solution...
Changelog:
return "file not found" error values instead of E_INVALIDARG if _ILCreateFromPathA() failed to find files
Index: pidl.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/pidl.c,v
retrieving revision 1.112
diff -u -p -d -r1.112 pidl.c
--- pidl.c 8 Apr 2004 04:37:43 -0000 1.112
+++ pidl.c 14 Apr 2004 18:24:02 -0000
@@ -1604,19 +1604,21 @@ LPITEMIDLIST _ILCreateFromFindDataA(WIN3
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)
Index: pidl.h
===================================================================
RCS file: /home/wine/wine/dlls/shell32/pidl.h,v
retrieving revision 1.39
diff -u -p -d -r1.39 pidl.h
--- pidl.h 8 Apr 2004 04:37:43 -0000 1.39
+++ pidl.h 14 Apr 2004 18:24:02 -0000
@@ -199,7 +199,7 @@ LPITEMIDLIST _ILCreateGuidFromStrA(LPCST
/* 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);
Index: shfldr_desktop.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shfldr_desktop.c,v
retrieving revision 1.23
diff -u -p -d -r1.23 shfldr_desktop.c
--- shfldr_desktop.c 13 Apr 2004 00:19:11 -0000 1.23
+++ shfldr_desktop.c 14 Apr 2004 18:24:03 -0000
@@ -197,7 +197,7 @@ static HRESULT WINAPI ISF_Desktop_fnPars
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_fnPars
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_fnPars
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);
}
}
}
Index: shfldr_fs.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shfldr_fs.c,v
retrieving revision 1.22
diff -u -p -d -r1.22 shfldr_fs.c
--- shfldr_fs.c 13 Apr 2004 00:19:11 -0000 1.22
+++ shfldr_fs.c 14 Apr 2004 18:24:03 -0000
@@ -353,22 +353,22 @@ IShellFolder_fnParseDisplayName (IShellF
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_fnSet
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_fnAddFol
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];
More information about the wine-patches
mailing list