Alexandre Julliard : user32: Convert the icon cache to a standard Wine list .

Alexandre Julliard julliard at winehq.org
Fri Oct 8 12:38:08 CDT 2010


Module: wine
Branch: master
Commit: 975bff627b7dd26df5715e080504f4e80933ae7e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=975bff627b7dd26df5715e080504f4e80933ae7e

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Oct  8 15:06:16 2010 +0200

user32: Convert the icon cache to a standard Wine list.

---

 dlls/user32/cursoricon.c |   22 ++++++++--------------
 1 files changed, 8 insertions(+), 14 deletions(-)

diff --git a/dlls/user32/cursoricon.c b/dlls/user32/cursoricon.c
index cea5552..ec9fd7e 100644
--- a/dlls/user32/cursoricon.c
+++ b/dlls/user32/cursoricon.c
@@ -38,6 +38,7 @@
 #include "wine/server.h"
 #include "controls.h"
 #include "user_private.h"
+#include "wine/list.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(cursor);
@@ -76,15 +77,10 @@ static const WCHAR DISPLAYW[] = {'D','I','S','P','L','A','Y',0};
 
 /**********************************************************************
  * ICONCACHE for cursors/icons loaded with LR_SHARED.
- *
- * FIXME: This should not be allocated on the system heap, but on a
- *        subsystem-global heap (i.e. one for all Win16 processes,
- *        and one for each Win32 process).
  */
 typedef struct tagICONCACHE
 {
-    struct tagICONCACHE *next;
-
+    struct list          entry;
     HMODULE              hModule;
     HRSRC                hRsrc;
     HRSRC                hGroupRsrc;
@@ -94,7 +90,7 @@ typedef struct tagICONCACHE
 
 } ICONCACHE;
 
-static ICONCACHE *IconAnchor = NULL;
+static struct list icon_cache = LIST_INIT( icon_cache );
 
 static CRITICAL_SECTION IconCrst;
 static CRITICAL_SECTION_DEBUG critsect_debug =
@@ -413,7 +409,7 @@ static HICON CURSORICON_FindSharedIcon( HMODULE hModule, HRSRC hRsrc )
 
     EnterCriticalSection( &IconCrst );
 
-    for ( ptr = IconAnchor; ptr; ptr = ptr->next )
+    LIST_FOR_EACH_ENTRY( ptr, &icon_cache, ICONCACHE, entry )
         if ( ptr->hModule == hModule && ptr->hRsrc == hRsrc )
         {
             ptr->count++;
@@ -443,16 +439,15 @@ static ICONCACHE* CURSORICON_FindCache(HICON hIcon)
 {
     ICONCACHE *ptr;
     ICONCACHE *pRet=NULL;
-    BOOL IsFound = FALSE;
 
     EnterCriticalSection( &IconCrst );
 
-    for (ptr = IconAnchor; ptr != NULL && !IsFound; ptr = ptr->next)
+    LIST_FOR_EACH_ENTRY( ptr, &icon_cache, ICONCACHE, entry )
     {
         if ( hIcon == ptr->hIcon )
         {
-            IsFound = TRUE;
             pRet = ptr;
+            break;
         }
     }
 
@@ -476,8 +471,7 @@ static void CURSORICON_AddSharedIcon( HMODULE hModule, HRSRC hRsrc, HRSRC hGroup
     ptr->count   = 1;
 
     EnterCriticalSection( &IconCrst );
-    ptr->next    = IconAnchor;
-    IconAnchor   = ptr;
+    list_add_head( &icon_cache, &ptr->entry );
     LeaveCriticalSection( &IconCrst );
 }
 
@@ -491,7 +485,7 @@ static INT CURSORICON_DelSharedIcon( HICON hIcon )
 
     EnterCriticalSection( &IconCrst );
 
-    for ( ptr = IconAnchor; ptr; ptr = ptr->next )
+    LIST_FOR_EACH_ENTRY( ptr, &icon_cache, ICONCACHE, entry )
         if ( ptr->hIcon == hIcon )
         {
             if ( ptr->count > 0 ) ptr->count--;




More information about the wine-cvs mailing list