[PATCH 06/11] shell32: _SHCreateSymbolicLinks() remove redundant code path (Desktop directory creation)

Rob Walker bob.mt.wya at gmail.com
Mon Jul 16 17:47:00 CDT 2018


The fall-back target path, 'pszPersonal' (base)+'DesktopW' (offset), will point to:

    '%USERPROFILE%\\Documents\\Desktop'

Wine does not create this directory. So this code path is clearly invalid,
as this symlink will never be created.
Refactor this block to make it consistent with the other 2 (preceding) blocks.

Signed-off-by: Rob Walker <bob.mt.wya at gmail.com>
---
 dlls/shell32/shellpath.c | 48 ++++++++++++++++++++++++----------------
 1 file changed, 29 insertions(+), 19 deletions(-)

diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c
index cf4d9ffbd0..faa8c892e9 100644
--- a/dlls/shell32/shellpath.c
+++ b/dlls/shell32/shellpath.c
@@ -4423,7 +4423,6 @@ static void _SHCreateSymbolicLinks(void)
     HRESULT hr;
     BOOL target_ok;
     char ** xdg_results;
-    char * xdg_desktop_dir;
 
     /* Create the '%USERPROFILE%\\My Documents' directory path. */
     hr = SHGetFolderPathW(NULL, CSIDL_PERSONAL|CSIDL_FLAG_CREATE, NULL,
@@ -4470,6 +4469,8 @@ static void _SHCreateSymbolicLinks(void)
             remove(pszPersonal);
             symlink(szPersonalTarget, pszPersonal);
         }
+
+        heap_free(pszPersonal);
     }
 
     /* Create symbolic links for 'My Pictures', 'My Videos' and 'My Music'. */
@@ -4515,28 +4516,37 @@ static void _SHCreateSymbolicLinks(void)
         heap_free(pszMyStuff);
     }
 
-    /* Create a symbolic link for the 'Desktop' folder. */
-    if (pszHome)
-        strcpy(szDesktopTarget, pszHome);
-    else
-        strcpy(szDesktopTarget, pszPersonal);
-    heap_free(pszPersonal);
-
-    xdg_desktop_dir = xdg_results ? xdg_results[num - 1] : NULL;
-    if (xdg_desktop_dir ||
-        (_SHAppendToUnixPath(szDesktopTarget, DesktopW) &&
-        !stat(szDesktopTarget, &statFolder) && S_ISDIR(statFolder.st_mode)))
-    {
-        /* Get the '%USERPROFILE%\\Desktop' directory path. */
-        hr = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY|CSIDL_FLAG_CREATE, NULL,
+    /* Get the '%USERPROFILE%\\Desktop' directory path. */
+    hr = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY|CSIDL_FLAG_CREATE, NULL,
                               SHGFP_TYPE_DEFAULT, wszTempPath);
-        if (SUCCEEDED(hr) && (pszDesktop = wine_get_unix_file_name(wszTempPath))) 
+    if (SUCCEEDED(hr) && pszHome)
+    {
+         /* Create a symbolic link for the 'Desktop' folder. */
+        pszDesktop = wine_get_unix_file_name(wszTempPath);
+        if (pszDesktop)
         {
-            remove(pszDesktop);
-            if (xdg_desktop_dir)
-                symlink(xdg_desktop_dir, pszDesktop);
+            strcpy(szDesktopTarget, pszHome);
+            i = num - 1;
+            /* Try to target the XDG_DESKTOP_DIR folder. */
+            if (xdg_results && xdg_results[i])
+            {
+                strcpy(szDesktopTarget, xdg_results[i]);
+                target_ok = TRUE;
+            }
+            /* Try to target the hardcoded / OS X 'Desktop' folder. */
             else
+            {
+                strcpy(szDesktopTarget, pszHome);
+                target_ok = _SHAppendToUnixPath(szDesktopTarget, DesktopW)
+                            && !stat(szDesktopTarget, &statFolder)
+                            && S_ISDIR(statFolder.st_mode);
+            }
+
+            if (target_ok)
+            {
+                remove(pszDesktop);
                 symlink(szDesktopTarget, pszDesktop);
+            }
             heap_free(pszDesktop);
         }
     }
-- 
2.18.0




More information about the wine-devel mailing list