[PATCH v2 7/9] shell32: Move 'Desktop' symbolic link creation to a separate function.
Olivier F. R. Dierick
o.dierick at piezo-forte.be
Tue Feb 18 17:16:42 CST 2020
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=22974
Signed-off-by: Olivier F. R. Dierick <o.dierick at piezo-forte.be>
---
dlls/shell32/shellpath.c | 84 +++++++++++++++++++++++++++---------------------
1 file changed, 48 insertions(+), 36 deletions(-)
diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c
index e9835db..2012ecb 100644
--- a/dlls/shell32/shellpath.c
+++ b/dlls/shell32/shellpath.c
@@ -4276,36 +4276,13 @@ static void _SHCreateMyStuffSymbolicLink(int nFolder)
}
/******************************************************************************
- * _SHCreateSymbolicLinks [Internal]
+ * _SHCreateDesktopSymbolicLink [Internal]
*
- * Sets up symbol links for various shell folders to point into the user's home
- * directory. We do an educated guess about what the user would probably want:
- * - If there is a 'My Documents' directory in $HOME, the user probably wants
- * wine's 'My Documents' to point there. Furthermore, we infer that the user
- * is a Windows lover and has no problem with wine creating subfolders for
- * 'My Pictures', 'My Music', 'My Videos' etc. under '$HOME/My Documents', if
- * those do not already exist. We put appropriate symbolic links in place for
- * those, too.
- * - If there is no 'My Documents' directory in $HOME, we let 'My Documents'
- * point directly to $HOME. We assume the user to be a unix hacker who does not
- * want wine to create anything anywhere besides the .wine directory. So, if
- * there already is a 'My Music' directory in $HOME, we symlink the 'My Music'
- * shell folder to it. But if not, then we check XDG_MUSIC_DIR - "well known"
- * directory, and try to link to that. If that fails, then we symlink to
- * $HOME directly. The same holds for 'My Pictures', 'My Videos' etc.
- * - The Desktop shell folder is symlinked to XDG_DESKTOP_DIR. If that does not
- * exist, then we try '$HOME/Desktop'. If that does not exist, then we leave
- * it alone.
- * ('My Music',... above in fact means LoadString(IDS_MYMUSIC))
+ * Sets up a symbolic link for the 'Desktop' shell folder to point into the
+ * users home directory.
*/
-static void _SHCreateSymbolicLinks(void)
+static void _SHCreateDesktopSymbolicLink(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
- };
static const char * const xdg_dirs[] = { "DESKTOP" };
static const unsigned int num = ARRAY_SIZE(xdg_dirs);
char *pszPersonal;
@@ -4314,13 +4291,6 @@ static void _SHCreateSymbolicLinks(void)
const char *pszHome;
char ** xdg_results;
char * xdg_desktop_dir;
- 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]);
/* Create all necessary profile sub-dirs up to 'My Documents' and get the unix path. */
pszPersonal = _SHGetFolderUnixPath(CSIDL_PERSONAL|CSIDL_FLAG_CREATE);
@@ -4330,14 +4300,13 @@ static void _SHCreateSymbolicLinks(void)
pszHome = getenv("HOME");
- /* Last but not least, 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;
+ xdg_desktop_dir = xdg_results ? xdg_results[0] : NULL;
if (xdg_desktop_dir ||
(_SHAppendToUnixPath(szDesktopTarget, DesktopW) &&
!stat(szDesktopTarget, &statFolder) && S_ISDIR(statFolder.st_mode)))
@@ -4358,6 +4327,49 @@ static void _SHCreateSymbolicLinks(void)
}
/******************************************************************************
+ * _SHCreateSymbolicLinks [Internal]
+ *
+ * Sets up symbol links for various shell folders to point into the user's home
+ * directory. We do an educated guess about what the user would probably want:
+ * - If there is a 'My Documents' directory in $HOME, the user probably wants
+ * wine's 'My Documents' to point there. Furthermore, we infer that the user
+ * is a Windows lover and has no problem with wine creating subfolders for
+ * 'My Pictures', 'My Music', 'My Videos' etc. under '$HOME/My Documents', if
+ * those do not already exist. We put appropriate symbolic links in place for
+ * those, too.
+ * - If there is no 'My Documents' directory in $HOME, we let 'My Documents'
+ * point directly to $HOME. We assume the user to be a unix hacker who does not
+ * want wine to create anything anywhere besides the .wine directory. So, if
+ * there already is a 'My Music' directory in $HOME, we symlink the 'My Music'
+ * shell folder to it. But if not, then we check XDG_MUSIC_DIR - "well known"
+ * directory, and try to link to that. If that fails, then we symlink to
+ * $HOME directly. The same holds for 'My Pictures', 'My Videos' etc.
+ * - The Desktop shell folder is symlinked to XDG_DESKTOP_DIR. If that does not
+ * exist, then we try '$HOME/Desktop'. If that does not exist, then we leave
+ * it alone.
+ * ('My Music',... above in fact means LoadString(IDS_MYMUSIC))
+ */
+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
+ };
+ 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();
+}
+
+/******************************************************************************
* SHGetFolderPathW [SHELL32.@]
*
* Convert nFolder to path.
--
2.1.4
More information about the wine-devel
mailing list