Resolve SHGetPathFromIDListW -> SHGetPathFromIDListA call
Rolf Kalbermatter
rolf.kalbermatter at citeng.com
Thu Dec 12 07:54:35 CST 2002
Changelog
* dlls/shell32/pidl.c
Resolve SHGetPathFromIDListW -> SHGetPathFromIDListA call
Remove Fixme comment in SHGetPathFromIDList as StrRetToStrN should take care of this
Get rid of some unsigned/signed comparison warnings with default warnings in MSVC
Rolf Kalbermatter
Index: dlls/shell32/pidl.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/pidl.c,v
retrieving revision 1.77
diff -u -r1.77 pidl.c
--- dlls/shell32/pidl.c 21 Nov 2002 23:56:42 -0000 1.77
+++ dlls/shell32/pidl.c 12 Dec 2002 13:39:12 -0000
@@ -912,11 +912,8 @@
* NULL returns FALSE
* desktop pidl gives path to desktopdirectory back
* special pidls returning FALSE
- *
- * FIXME
- * fnGetDisplayNameOf can return different types of OLEString
*/
-BOOL WINAPI SHGetPathFromIDListA (LPCITEMIDLIST pidl, LPSTR pszPath)
+BOOL WINAPI SHGetPathFromIDListA(LPCITEMIDLIST pidl, LPSTR pszPath)
{
HRESULT hr;
STRRET str;
@@ -942,17 +939,28 @@
/*************************************************************************
* SHGetPathFromIDListW [SHELL32.@]
*/
-BOOL WINAPI SHGetPathFromIDListW (LPCITEMIDLIST pidl,LPWSTR pszPath)
-{ char sTemp[MAX_PATH];
+BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
+{
+ HRESULT hr;
+ STRRET str;
+ LPSHELLFOLDER shellfolder;
- TRACE_(shell)("(pidl=%p)\n", pidl);
+ TRACE_(shell)("(pidl=%p,%p)\n", pidl, debugstr_w(pszPath));
+ pdump(pidl);
- SHGetPathFromIDListA (pidl, sTemp);
- MultiByteToWideChar( CP_ACP, 0, sTemp, -1, pszPath, MAX_PATH );
+ if (!pidl) return FALSE;
- TRACE_(shell)("-- (%s)\n",debugstr_w(pszPath));
+ hr = SHGetDesktopFolder(&shellfolder);
+ if (SUCCEEDED(hr)) {
+ hr = IShellFolder_GetDisplayNameOf(shellfolder, pidl, SHGDN_FORPARSING, &str);
+ if (SUCCEEDED(hr)) {
+ StrRetToStrNW(pszPath, MAX_PATH, &str, pidl);
+ }
+ IShellFolder_Release(shellfolder);
+ }
- return TRUE;
+ TRACE_(shell)("-- %s, 0x%08lx\n",debugstr_w(pszPath), hr);
+ return SUCCEEDED(hr);
}
/*************************************************************************
@@ -1745,11 +1753,11 @@
*/
void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl)
{
- int i;
+ UINT i;
- if(apidl)
+ if (apidl)
{
- for(i = 0; i < cidl; i++) SHFree(apidl[i]);
+ for (i = 0; i < cidl; i++) SHFree(apidl[i]);
SHFree(apidl);
}
}
@@ -1761,11 +1769,11 @@
*/
LPITEMIDLIST * _ILCopyaPidl(LPITEMIDLIST * apidlsrc, UINT cidl)
{
- int i;
+ UINT i;
LPITEMIDLIST * apidldest = (LPITEMIDLIST*)SHAlloc(cidl * sizeof(LPITEMIDLIST));
if(!apidlsrc) return NULL;
- for(i = 0; i < cidl; i++)
+ for (i = 0; i < cidl; i++)
apidldest[i] = ILClone(apidlsrc[i]);
return apidldest;
@@ -1778,7 +1786,7 @@
*/
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, LPIDA cida)
{
- int i;
+ UINT i;
LPITEMIDLIST * dst = (LPITEMIDLIST*)SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
if(!dst) return NULL;
@@ -1786,7 +1794,7 @@
if (pidl)
*pidl = ILClone((LPITEMIDLIST)(&((LPBYTE)cida)[cida->aoffset[0]]));
- for(i = 0; i < cida->cidl; i++)
+ for (i = 0; i < cida->cidl; i++)
dst[i] = ILClone((LPITEMIDLIST)(&((LPBYTE)cida)[cida->aoffset[i + 1]]));
return dst;
More information about the wine-patches
mailing list