[PATCH 2/2] shell32/iconcache: Simplify and break as soon as one shortcut failed to overlay

Gabriel Ivăncescu gabrielopcode at gmail.com
Mon Oct 8 13:51:15 CDT 2018


There is no need to initialize and destroy shortcut icons that we haven't
even processed.

Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
 dlls/shell32/iconcache.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/dlls/shell32/iconcache.c b/dlls/shell32/iconcache.c
index 5ffb293..2e6e0ff 100644
--- a/dlls/shell32/iconcache.c
+++ b/dlls/shell32/iconcache.c
@@ -354,7 +354,6 @@ static INT SIC_IconAppend (const WCHAR *sourcefile, INT src_index, HICON *hicons
 static INT SIC_LoadIcon (const WCHAR *sourcefile, INT index, DWORD flags)
 {
     HICON hicons[ARRAY_SIZE(shell_imagelists)] = { 0 };
-    HICON hshortcuts[ARRAY_SIZE(hicons)] = { 0 };
     SIZE size[ARRAY_SIZE(shell_imagelists)];
     unsigned int i;
     INT ret = -1;
@@ -421,6 +420,7 @@ static INT SIC_LoadIcon (const WCHAR *sourcefile, INT index, DWORD flags)
 
     if (flags & GIL_FORSHORTCUT)
     {
+        HICON hshortcuts[ARRAY_SIZE(hicons)];
         BOOL failed = FALSE;
 
         for (i = 0; i < ARRAY_SIZE(hshortcuts); i++)
@@ -429,13 +429,15 @@ static INT SIC_LoadIcon (const WCHAR *sourcefile, INT index, DWORD flags)
             {
                 WARN("Failed to create shortcut overlaid icons.\n");
                 failed = TRUE;
+                break;
             }
         }
 
         if (failed)
         {
-            for (i = 0; i < ARRAY_SIZE(hshortcuts); i++)
-                DestroyIcon(hshortcuts[i]);
+            unsigned int k;
+            for (k = 0; k < i; k++)
+                DestroyIcon(hshortcuts[k]);
             flags &= ~GIL_FORSHORTCUT;
         }
         else
-- 
1.9.1




More information about the wine-devel mailing list