From 7d19601012d879c19c4e221a95c24100d47a2950 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Fri, 9 Apr 2010 14:28:26 +0200 Subject: [PATCH] shell32: Convert the change notifications list to a standard list. --- dlls/shell32/changenotify.c | 45 ++++++++++++--------------------------------- 1 file changed, 12 insertions(+), 33 deletions(-) diff --git a/dlls/shell32/changenotify.c b/dlls/shell32/changenotify.c index 13d70dcad2b..3e79b2e161e 100644 --- a/dlls/shell32/changenotify.c +++ b/dlls/shell32/changenotify.c @@ -25,6 +25,7 @@ #define NONAMELESSSTRUCT #include "windef.h" #include "winbase.h" +#include "wine/list.h" #include "wine/debug.h" #include "shell32_main.h" @@ -44,8 +45,7 @@ typedef SHChangeNotifyEntry *LPNOTIFYREGISTER; /* internal list of notification clients (internal) */ typedef struct _NOTIFICATIONLIST { - struct _NOTIFICATIONLIST *next; - struct _NOTIFICATIONLIST *prev; + struct list entry; HWND hwnd; /* window to notify */ DWORD uMsg; /* message to send */ LPNOTIFYREGISTER apidl; /* array of entries to watch*/ @@ -57,7 +57,7 @@ typedef struct _NOTIFICATIONLIST } NOTIFICATIONLIST, *LPNOTIFICATIONLIST; -static NOTIFICATIONLIST *head, *tail; +static struct list notifications = LIST_INIT( notifications ); #define SHCNE_NOITEMEVENTS ( \ SHCNE_ASSOCCHANGED ) @@ -117,24 +117,10 @@ static const char * NodeName(const NOTIFICATIONLIST *item) return str; } -static void AddNode(LPNOTIFICATIONLIST item) -{ - TRACE("item %p\n", item ); - - /* link items */ - item->prev = tail; - item->next = NULL; - if( tail ) - tail->next = item; - else - head = item; - tail = item; -} - static LPNOTIFICATIONLIST FindNode( HANDLE hitem ) { LPNOTIFICATIONLIST ptr; - for( ptr = head; ptr; ptr = ptr->next ) + LIST_FOR_EACH_ENTRY( ptr, ¬ifications, NOTIFICATIONLIST, entry ) if( ptr == hitem ) return ptr; return NULL; @@ -144,17 +130,10 @@ static void DeleteNode(LPNOTIFICATIONLIST item) { UINT i; - TRACE("item=%p prev=%p next=%p\n", item, item->prev, item->next); + TRACE("item=%p\n", item); /* remove item from list */ - if( item->prev ) - item->prev->next = item->next; - else - head = item->next; - if( item->next ) - item->next->prev = item->prev; - else - tail = item->prev; + list_remove( &item->entry ); /* free the item */ for (i=0; icidl; i++) @@ -169,12 +148,14 @@ void InitChangeNotifications(void) void FreeChangeNotifications(void) { + LPNOTIFICATIONLIST ptr, next; + TRACE("\n"); EnterCriticalSection(&SHELL32_ChangenotifyCS); - while( head ) - DeleteNode( head ); + LIST_FOR_EACH_ENTRY_SAFE( ptr, next, ¬ifications, NOTIFICATIONLIST, entry ) + DeleteNode( ptr ); LeaveCriticalSection(&SHELL32_ChangenotifyCS); @@ -202,8 +183,6 @@ SHChangeNotifyRegister( TRACE("(%p,0x%08x,0x%08x,0x%08x,%d,%p) item=%p\n", hwnd, fSources, wEventMask, uMsg, cItems, lpItems, item); - item->next = NULL; - item->prev = NULL; item->cidl = cItems; item->apidl = SHAlloc(sizeof(SHChangeNotifyEntry) * cItems); for(i=0;ientry ); LeaveCriticalSection(&SHELL32_ChangenotifyCS); @@ -349,7 +328,7 @@ void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID EnterCriticalSection(&SHELL32_ChangenotifyCS); /* loop through the list */ - for( ptr = head; ptr; ptr = ptr->next ) + LIST_FOR_EACH_ENTRY( ptr, ¬ifications, NOTIFICATIONLIST, entry ) { BOOL notify; DWORD i; -- 2.11.4.GIT