Andrew Eikum : shell32: Pass the file extension to ParseDisplayName in unixfs's SetNameOf.

Alexandre Julliard julliard at winehq.org
Tue Jun 29 10:25:20 CDT 2010


Module: wine
Branch: master
Commit: 2b3fea0249de423a3056a3ba3215fa86cb057e6e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2b3fea0249de423a3056a3ba3215fa86cb057e6e

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Mon Jun 28 09:35:36 2010 -0500

shell32: Pass the file extension to ParseDisplayName in unixfs's SetNameOf.

---

 dlls/shell32/shfldr_unixfs.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/dlls/shell32/shfldr_unixfs.c b/dlls/shell32/shfldr_unixfs.c
index dfd7255..9c9f94a 100644
--- a/dlls/shell32/shfldr_unixfs.c
+++ b/dlls/shell32/shfldr_unixfs.c
@@ -1183,9 +1183,9 @@ static HRESULT WINAPI UnixFolder_IShellFolder2_SetNameOf(IShellFolder2* iface, H
 
     static const WCHAR awcInvalidChars[] = { '\\', '/', ':', '*', '?', '"', '<', '>', '|' };
     char szSrc[FILENAME_MAX], szDest[FILENAME_MAX];
-    WCHAR wszSrcRelative[MAX_PATH];
+    WCHAR wszSrcRelative[MAX_PATH], *pwszExt = NULL;
     unsigned int i;
-    int cBasePathLen = lstrlenA(This->m_pszPath);
+    int cBasePathLen = lstrlenA(This->m_pszPath), cNameLen;
     struct stat statDest;
     LPITEMIDLIST pidlSrc, pidlDest, pidlRelativeDest;
     LPOLESTR lpwszName;
@@ -1221,8 +1221,8 @@ static HRESULT WINAPI UnixFolder_IShellFolder2_SetNameOf(IShellFolder2* iface, H
         _ILSimpleGetTextW(pidl, wszSrcRelative, MAX_PATH) && 
         SHELL_FS_HideExtension(wszSrcRelative))
     {
-        WCHAR *pwszExt = PathFindExtensionW(wszSrcRelative);
         int cLenDest = strlen(szDest);
+        pwszExt = PathFindExtensionW(wszSrcRelative);
         WideCharToMultiByte(CP_UNIXCP, 0, pwszExt, -1, szDest + cLenDest, 
             FILENAME_MAX - cLenDest, NULL, NULL);
     }
@@ -1238,8 +1238,14 @@ static HRESULT WINAPI UnixFolder_IShellFolder2_SetNameOf(IShellFolder2* iface, H
         return E_FAIL;
     
     /* Build a pidl for the path of the renamed file */
-    lpwszName = SHAlloc((lstrlenW(lpcwszName)+1)*sizeof(WCHAR)); /* due to const correctness. */
+    cNameLen = lstrlenW(lpcwszName) + 1;
+    if(pwszExt)
+        cNameLen += lstrlenW(pwszExt);
+    lpwszName = SHAlloc(cNameLen*sizeof(WCHAR)); /* due to const correctness. */
     lstrcpyW(lpwszName, lpcwszName);
+    if(pwszExt)
+        lstrcatW(lpwszName, pwszExt);
+
     hr = IShellFolder2_ParseDisplayName(iface, NULL, NULL, lpwszName, NULL, &pidlRelativeDest, NULL);
     SHFree(lpwszName);
     if (FAILED(hr)) {




More information about the wine-cvs mailing list