Olivier F. R. Dierick : shell32: Add a function to create one specific symbolic link at a time for user dirs.

Alexandre Julliard julliard at winehq.org
Thu Feb 20 18:26:14 CST 2020


Module: wine
Branch: master
Commit: 9cb47e882123dfdbc0f93ef0d7fb0068edda80d0
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=9cb47e882123dfdbc0f93ef0d7fb0068edda80d0

Author: Olivier F. R. Dierick <o.dierick at piezo-forte.be>
Date:   Wed Feb 19 00:16:43 2020 +0100

shell32: Add a function to create one specific symbolic link at a time for user dirs.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=22974
Signed-off-by: Olivier F. R. Dierick <o.dierick at piezo-forte.be>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/shell32/shellpath.c | 46 +++++++++++++++++++++++++++++++++++-----------
 1 file changed, 35 insertions(+), 11 deletions(-)

diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c
index 2012ecbe35..d32529bae3 100644
--- a/dlls/shell32/shellpath.c
+++ b/dlls/shell32/shellpath.c
@@ -4326,6 +4326,39 @@ static void _SHCreateDesktopSymbolicLink(void)
     _SHFreeXDGUserDirs(num, xdg_results);
 }
 
+/******************************************************************************
+ * _SHCreateSymbolicLink  [Internal]
+ *
+ * Sets up a symbolic link for one of the special shell folders to point into
+ * the users home directory.
+ *
+ * PARAMS
+ *  nFolder [I] CSIDL identifying the folder.
+ */
+static void _SHCreateSymbolicLink(int nFolder)
+{
+    static const UINT aidsMyStuff[] = {
+        IDS_MYPICTURES, IDS_MYVIDEOS, IDS_MYMUSIC, IDS_DOWNLOADS, IDS_TEMPLATES
+    };
+    DWORD folder = nFolder & CSIDL_FOLDER_MASK;
+
+    switch (folder) {
+        case CSIDL_PERSONAL:
+            _SHCreateMyDocumentsSymbolicLink(aidsMyStuff, ARRAY_SIZE(aidsMyStuff));
+            break;
+        case CSIDL_MYPICTURES:
+        case CSIDL_MYVIDEO:
+        case CSIDL_MYMUSIC:
+        case CSIDL_DOWNLOADS:
+        case CSIDL_TEMPLATES:
+            _SHCreateMyStuffSymbolicLink(folder);
+            break;
+        case CSIDL_DESKTOPDIRECTORY:
+            _SHCreateDesktopSymbolicLink();
+            break;
+    }
+}
+
 /******************************************************************************
  * _SHCreateSymbolicLinks  [Internal]
  *
@@ -4351,22 +4384,13 @@ static void _SHCreateDesktopSymbolicLink(void)
  */
 static void _SHCreateSymbolicLinks(void)
 {
-    static const UINT aidsMyStuff[] = {
-        IDS_MYPICTURES, IDS_MYVIDEOS, IDS_MYMUSIC, IDS_DOWNLOADS, IDS_TEMPLATES
-    };
     static const int acsidlMyStuff[] = {
-        CSIDL_MYPICTURES, CSIDL_MYVIDEO, CSIDL_MYMUSIC, CSIDL_DOWNLOADS, CSIDL_TEMPLATES
+        CSIDL_MYPICTURES, CSIDL_MYVIDEO, CSIDL_MYMUSIC, CSIDL_DOWNLOADS, CSIDL_TEMPLATES, CSIDL_PERSONAL, CSIDL_DESKTOPDIRECTORY
     };
     UINT i;
 
-    _SHCreateMyDocumentsSymbolicLink(aidsMyStuff, ARRAY_SIZE(aidsMyStuff));
-
-    /* Create symbolic links for 'My Pictures', 'My Videos', 'My Music' etc. */
     for (i=0; i < ARRAY_SIZE(acsidlMyStuff); i++)
-        _SHCreateMyStuffSymbolicLink(acsidlMyStuff[i]);
-
-    /* Last but not least, the Desktop folder */
-    _SHCreateDesktopSymbolicLink();
+        _SHCreateSymbolicLink(acsidlMyStuff[i]);
 }
 
 /******************************************************************************




More information about the wine-cvs mailing list