Author: tfaber
Date: Tue Oct 21 12:43:15 2014
New Revision: 64865
URL: 
http://svn.reactos.org/svn/reactos?rev=64865&view=rev
Log:
[WIN32K]
- Remove bug-hiding list macros that accept NULL in LIST_ENTRYs.
CORE-8668 #resolve
Modified:
    trunk/reactos/win32ss/gdi/ntgdi/misc.h
    trunk/reactos/win32ss/user/ntuser/cursoricon.c
    trunk/reactos/win32ss/user/ntuser/desktop.c
Modified: trunk/reactos/win32ss/gdi/ntgdi/misc.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/misc.h?r…
==============================================================================
--- trunk/reactos/win32ss/gdi/ntgdi/misc.h      [iso-8859-1] (original)
+++ trunk/reactos/win32ss/gdi/ntgdi/misc.h      [iso-8859-1] Tue Oct 21 12:43:15 2014
@@ -162,15 +162,3 @@
 #define ROUND_UP(n, align) \
     ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
-
-#define LIST_FOR_EACH(elem, list, type, field) \
-    for ((elem) = CONTAINING_RECORD((list)->Flink, type, field); \
-         &(elem)->field != (list) && ((&((elem)->field)) != NULL);
\
-         (elem) = CONTAINING_RECORD((elem)->field.Flink, type, field))
-
-#define LIST_FOR_EACH_SAFE(cursor, cursor2, list, type, field) \
-    for ((cursor) = CONTAINING_RECORD((list)->Flink, type, field), \
-         (cursor2) = CONTAINING_RECORD((cursor)->field.Flink, type, field); \
-         &(cursor)->field != (list); \
-         (cursor) = (cursor2), \
-         (cursor2) = CONTAINING_RECORD((cursor)->field.Flink, type, field))
Modified: trunk/reactos/win32ss/user/ntuser/cursoricon.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/cursor…
==============================================================================
--- trunk/reactos/win32ss/user/ntuser/cursoricon.c      [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/ntuser/cursoricon.c      [iso-8859-1] Tue Oct 21 12:43:15
2014
@@ -144,12 +144,16 @@
 ReferenceCurIconByProcess(PCURICON_OBJECT CurIcon)
 {
     PPROCESSINFO Win32Process;
+    PLIST_ENTRY ListEntry;
     PCURICON_PROCESS Current;
     Win32Process = PsGetCurrentProcessWin32Process();
-    LIST_FOR_EACH(Current, &CurIcon->ProcessList, CURICON_PROCESS, ListEntry)
-    {
+    ListEntry = CurIcon->ProcessList.Flink;
+    while (ListEntry != &CurIcon->ProcessList)
+    {
+        Current = CONTAINING_RECORD(ListEntry, CURICON_PROCESS, ListEntry);
+        ListEntry = ListEntry->Flink;
         if (Current->Process == Win32Process)
         {
             /* Already registered for this process */
@@ -173,10 +177,14 @@
 IntFindExistingCurIconObject(HMODULE hModule,
                              HRSRC hRsrc, LONG cx, LONG cy)
 {
+    PLIST_ENTRY ListEntry;
     PCURICON_OBJECT CurIcon;
-    LIST_FOR_EACH(CurIcon, &gCurIconList, CURICON_OBJECT, ListEntry)
-    {
+    ListEntry = gCurIconList.Flink;
+    while (ListEntry != &gCurIconList)
+    {
+        CurIcon = CONTAINING_RECORD(ListEntry, CURICON_OBJECT, ListEntry);
+        ListEntry = ListEntry->Flink;
         // if (NT_SUCCESS(UserReferenceObjectByPointer(Object, TYPE_CURSOR))) // <-
huh????
 //      UserReferenceObject(  CurIcon);
@@ -247,7 +255,8 @@
     PSYSTEM_CURSORINFO CurInfo;
     HBITMAP bmpMask, bmpColor;
     BOOLEAN Ret, bListEmpty, bFound = FALSE;
-    PCURICON_PROCESS Current = NULL;
+    PLIST_ENTRY ListEntry;
+    PCURICON_PROCESS Current;
     /* For handles created without any data (error handling) */
     if(IsListEmpty(&CurIcon->ProcessList))
@@ -255,8 +264,11 @@
     /* Now find this process in the list of processes referencing this object and
        remove it from that list */
-    LIST_FOR_EACH(Current, &CurIcon->ProcessList, CURICON_PROCESS, ListEntry)
-    {
+    ListEntry = CurIcon->ProcessList.Flink;
+    while (ListEntry != &CurIcon->ProcessList)
+    {
+        Current = CONTAINING_RECORD(ListEntry, CURICON_PROCESS, ListEntry);
+        ListEntry = ListEntry->Flink;
         if (Current->Process == ppi)
         {
             bFound = TRUE;
Modified: trunk/reactos/win32ss/user/ntuser/desktop.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/deskto…
==============================================================================
--- trunk/reactos/win32ss/user/ntuser/desktop.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/ntuser/desktop.c [iso-8859-1] Tue Oct 21 12:43:15 2014
@@ -806,12 +806,17 @@
 UserBuildShellHookHwndList(PDESKTOP Desktop)
 {
    ULONG entries=0;
+   PLIST_ENTRY ListEntry;
    PSHELL_HOOK_WINDOW Current;
    HWND* list;
    /* FIXME: If we save nb elements in desktop, we dont have to loop to find nb entries
*/
-   LIST_FOR_EACH(Current, &Desktop->ShellHookWindows, SHELL_HOOK_WINDOW,
ListEntry)
+   ListEntry = Desktop->ShellHookWindows.Flink;
+   while (ListEntry != &Desktop->ShellHookWindows)
+   {
+      ListEntry = ListEntry->Flink;
       entries++;
+   }
    if (!entries) return NULL;
@@ -820,8 +825,13 @@
    {
       HWND* cursor = list;
-      LIST_FOR_EACH(Current, &Desktop->ShellHookWindows, SHELL_HOOK_WINDOW,
ListEntry)
+      ListEntry = Desktop->ShellHookWindows.Flink;
+      while (ListEntry != &Desktop->ShellHookWindows)
+      {
+         Current = CONTAINING_RECORD(ListEntry, SHELL_HOOK_WINDOW, ListEntry);
+         ListEntry = ListEntry->Flink;
          *cursor++ = Current->hWnd;
+      }
       *cursor = NULL; /* Nullterm list */
    }
@@ -930,10 +940,14 @@
 {
    PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
    PDESKTOP Desktop = pti->rpdesk;
+   PLIST_ENTRY ListEntry;
    PSHELL_HOOK_WINDOW Current;
-   LIST_FOR_EACH(Current, &Desktop->ShellHookWindows, SHELL_HOOK_WINDOW,
ListEntry)
-   {
+   ListEntry = Desktop->ShellHookWindows.Flink;
+   while (ListEntry != &Desktop->ShellHookWindows)
+   {
+      Current = CONTAINING_RECORD(ListEntry, SHELL_HOOK_WINDOW, ListEntry);
+      ListEntry = ListEntry->Flink;
       if (Current->hWnd == hWnd)
       {
          RemoveEntryList(&Current->ListEntry);