https://git.reactos.org/?p=reactos.git;a=commitdiff;h=78b78d6e735a69f497c6277f6dfdb10d55505802

commit 78b78d6e735a69f497c6277f6dfdb10d55505802
Author: Giannis Adamopoulos <[email protected]>
AuthorDate: Sun Nov 5 12:09:42 2017 +0200

    [SHELL32] SHBrowseForFolderW: Fix creating directories in the desktop and 
in drives like C: CORE-13925
---
 dll/win32/shell32/wine/brsfolder.c | 49 +++++++++++++++++++++++++-------------
 1 file changed, 33 insertions(+), 16 deletions(-)

diff --git a/dll/win32/shell32/wine/brsfolder.c 
b/dll/win32/shell32/wine/brsfolder.c
index 36608314e2..499e040ef3 100644
--- a/dll/win32/shell32/wine/brsfolder.c
+++ b/dll/win32/shell32/wine/brsfolder.c
@@ -748,35 +748,52 @@ static HRESULT BrsFolder_NewFolder(browse_info *info)
     HRESULT hr;
     int len;
 
-    if(!info->pidlRet) {
-        ERR("Make new folder button should be disabled\n");
-        return E_FAIL;
-    }
-
-    /* Create new directory */
+#ifdef __REACTOS__
     hr = SHGetDesktopFolder(&desktop);
     if(FAILED(hr))
         return hr;
-    hr = IShellFolder_BindToObject(desktop, info->pidlRet, 0, 
&IID_IShellFolder, (void**)&cur);
-    IShellFolder_Release(desktop);
-    if(FAILED(hr))
-        return hr;
 
-#ifdef __REACTOS__
-    hr = SHGetPathFromIDListW(info->pidlRet, path);
+    if (info->pidlRet)
+    {
+        hr = IShellFolder_BindToObject(desktop, info->pidlRet, 0, 
&IID_IShellFolder, (void**)&cur);
+        IShellFolder_Release(desktop);
+        if(FAILED(hr))
+            return hr;
+
+        hr = SHGetPathFromIDListW(info->pidlRet, path);
+    }
+    else
+    {
+        cur = desktop;
+        hr = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY, NULL, 
SHGFP_TYPE_CURRENT, path);
+    }
     if(FAILED(hr))
         return hr;
 
-    len = strlenW(path);
-    if(len<MAX_PATH)
-        len++;
-        
     if (!LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, 
_countof(wszNewFolder)))
         return E_FAIL;
 
     if (!PathYetAnotherMakeUniqueName(name, path, NULL, wszNewFolder))
         return E_FAIL;
+
+    len = strlenW(path);
+    if(len<MAX_PATH && name[len] == L'\\')
+        len++;
 #else
+    if(!info->pidlRet) {
+        ERR("Make new folder button should be disabled\n");
+        return E_FAIL;
+    }
+
+    /* Create new directory */
+    hr = SHGetDesktopFolder(&desktop);
+    if(FAILED(hr))
+        return hr;
+
+    hr = IShellFolder_BindToObject(desktop, info->pidlRet, 0, 
&IID_IShellFolder, (void**)&cur);
+    IShellFolder_Release(desktop);
+    if(FAILED(hr))
+        return hr;
 
     hr = IShellFolder_QueryInterface(cur, &IID_ISFHelper, (void**)&sfhelper);
     if(FAILED(hr))

Reply via email to