shell32 patch 13
Martin Fuchs
martin-fuchs at gmx.net
Tue Jan 20 16:16:16 CST 2004
Changelog:
- only return valid file system names from RenderFILENAMEA/W()
by using SHELL_GetPathFromIDListA/W()
Index: clipboard.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/clipboard.c,v
retrieving revision 1.16
diff -u -p -d -r1.16 clipboard.c
--- clipboard.c 5 Sep 2003 23:08:31 -0000 1.16
+++ clipboard.c 20 Jan 2004 22:19:51 -0000
@@ -209,17 +209,24 @@ HGLOBAL RenderFILEDESCRIPTOR (LPITEMIDLI
HGLOBAL RenderFILENAMEA (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
{
- int len, size = 0;
+ int size = 0;
char szTemp[MAX_PATH], *szFileName;
+ LPITEMIDLIST pidl;
HGLOBAL hGlobal;
+ HRESULT hr;
TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl);
- /* build name of first file */
- SHGetPathFromIDListA(pidlRoot, szTemp);
- PathAddBackslashA(szTemp);
- len = strlen(szTemp);
- _ILSimpleGetText(apidl[0], szTemp+len, MAX_PATH - len);
+ /* get path of combined pidl */
+ pidl = ILCombine(pidlRoot, apidl[0]);
+ if (!pidl)
+ return 0;
+
+ hr = SHELL_GetPathFromIDListA(pidl, szTemp, MAX_PATH);
+ SHFree(pidl);
+ if (FAILED(hr))
+ return 0;
+
size = strlen(szTemp) + 1;
/* fill the structure */
@@ -228,23 +235,31 @@ HGLOBAL RenderFILENAMEA (LPITEMIDLIST pi
szFileName = (char *)GlobalLock(hGlobal);
memcpy(szFileName, szTemp, size);
GlobalUnlock(hGlobal);
+
return hGlobal;
}
HGLOBAL RenderFILENAMEW (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
{
- int len, size = 0;
+ int size = 0;
WCHAR szTemp[MAX_PATH], *szFileName;
+ LPITEMIDLIST pidl;
HGLOBAL hGlobal;
+ HRESULT hr;
TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl);
- /* build name of first file */
- SHGetPathFromIDListW(pidlRoot, szTemp);
- PathAddBackslashW(szTemp);
- len = strlenW(szTemp);
- _ILSimpleGetTextW(apidl[0], szTemp+len, MAX_PATH - len);
- size = sizeof(WCHAR) * (strlenW(szTemp)+1);
+ /* get path of combined pidl */
+ pidl = ILCombine(pidlRoot, apidl[0]);
+ if (!pidl)
+ return 0;
+
+ hr = SHELL_GetPathFromIDListW(pidl, szTemp, MAX_PATH);
+ SHFree(pidl);
+ if (FAILED(hr))
+ return 0;
+
+ size = (strlenW(szTemp)+1) * sizeof(WCHAR);
/* fill the structure */
hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size);
@@ -252,6 +267,7 @@ HGLOBAL RenderFILENAMEW (LPITEMIDLIST pi
szFileName = (WCHAR *)GlobalLock(hGlobal);
memcpy(szFileName, szTemp, size);
GlobalUnlock(hGlobal);
+
return hGlobal;
}
More information about the wine-patches
mailing list