[PATCH 03/11] shell32: _SHCreateSymbolicLinks() refactor subcode block demarkation

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


Cleanup code to avoid the use of an infinite while loop, as a pseudo code subblock
demarker (which is not very readable).

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

diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c
index ee5274b5fc..b223bf5212 100644
--- a/dlls/shell32/shellpath.c
+++ b/dlls/shell32/shellpath.c
@@ -4421,6 +4421,7 @@ static void _SHCreateSymbolicLinks(void)
     struct stat statFolder;
     const char *pszHome;
     HRESULT hr;
+    BOOL target_ok;
     char ** xdg_results;
     char * xdg_desktop_dir;
 
@@ -4440,31 +4441,34 @@ static void _SHCreateSymbolicLinks(void)
 
     if (pszHome)
     {
-        while (1)
+        target_ok = FALSE;
+
+        /* Try to target a pre-existing '$HOME/My Documents' folder. */
+        strcpy(szPersonalTarget, pszHome);
+        if (_SHAppendToUnixPath(szPersonalTarget, MAKEINTRESOURCEW(IDS_PERSONAL)) &&
+            !stat(szPersonalTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
+        {
+            target_ok = TRUE;
+        }
+        /* Try to target the XDG_DOCUMENTS_DIR folder. */
+        else if (xdg_results && xdg_results[num-2])
+        {
+            strcpy(szPersonalTarget, xdg_results[num-2]);
+            target_ok = TRUE;
+        }
+        /* Try to target the hardcoded / OS X 'Documents' folder. */
+        else
         {
-            /* Try to target a pre-existing '$HOME/My Documents' folder. */
             strcpy(szPersonalTarget, pszHome);
-            if (_SHAppendToUnixPath(szPersonalTarget, MAKEINTRESOURCEW(IDS_PERSONAL)) &&
-                !stat(szPersonalTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
-                break;
-
-            /* Try to target the XDG_DOCUMENTS_DIR folder. */
-            if (xdg_results && xdg_results[num-2])
-            {
-                strcpy(szPersonalTarget, xdg_results[num-2]);
-                break;
-            }
+            target_ok = _SHAppendToUnixPath(szPersonalTarget, DocumentsW)
+                                            && !stat(szPersonalTarget, &statFolder)
+                                            && S_ISDIR(statFolder.st_mode);
+        }
 
-            /* Try to target the hardcoded / OS X 'Documents' folder. */
+        /* Target the '$HOME' folder directly (fallback). */
+        if (!target_ok)
             strcpy(szPersonalTarget, pszHome);
-            if (_SHAppendToUnixPath(szPersonalTarget, DocumentsW) &&
-                !stat(szPersonalTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
-                break;
 
-            /* Target the '$HOME' folder directly (fallback). */
-            strcpy(szPersonalTarget, pszHome);
-            break;
-        }
         remove(pszPersonal);
         symlink(szPersonalTarget, pszPersonal);
     }
@@ -4478,33 +4482,36 @@ static void _SHCreateSymbolicLinks(void)
         if (FAILED(hr) || !pszHome) continue;
 
         pszMyStuff = wine_get_unix_file_name(wszTempPath);
-        if (!pszMyStuff) continue;
-
-        while (1)
-        {
-            /* Try to target a pre-existing '$HOME/My Documents/My XXX' folder. */
-            strcpy(szMyStuffTarget, pszHome);
-            if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i])) &&
-                !stat(szMyStuffTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
-                break;
+        if (!pszMyStuff)  continue;
 
-            /* Try to target the XDG_XXX_DIR folder. */
-            if (xdg_results && xdg_results[i])
-            {
-                strcpy(szMyStuffTarget, xdg_results[i]);
-                break;
-            }
+        target_ok = FALSE;
 
-            /* Try to target the hardcoded / OS X 'XXX' folder. */
+        /* Try to target a pre-existing '$HOME/My Documents/My XXX' folder. */
+        strcpy(szMyStuffTarget, pszHome);
+        if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i])) &&
+            !stat(szMyStuffTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
+        {
+            target_ok = TRUE;
+        }
+        /* Try to target the XDG_XXX_DIR folder. */
+        else if (xdg_results && xdg_results[i])
+        {
+            strcpy(szMyStuffTarget, xdg_results[i]);
+            target_ok = TRUE;
+        }
+        /* Try to target the hardcoded / OS X 'XXX' folder. */
+        else
+        {
             strcpy(szMyStuffTarget, pszHome);
-            if (_SHAppendToUnixPath(szMyStuffTarget, MyOSXStuffW[i]) &&
-                !stat(szMyStuffTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
-                break;
+            target_ok = _SHAppendToUnixPath(szMyStuffTarget, MyOSXStuffW[i])
+                                            && !stat(szMyStuffTarget, &statFolder)
+                                            && S_ISDIR(statFolder.st_mode);
+        }
 
-            /* Use the same target as '%USERPROFILE%\\My Documents' (fallback). */
+        /* Use the same target as '%USERPROFILE%\\My Documents' (fallback). */
+        if (!target_ok)
             strcpy(szMyStuffTarget, szPersonalTarget);
-            break;
-        }
+
         remove(pszMyStuff);
         symlink(szMyStuffTarget, pszMyStuff);
         heap_free(pszMyStuff);
-- 
2.18.0




More information about the wine-devel mailing list