[GDI32]: Don't destroy the heap when calling GetSystemPaletteEntries. Note to whoever...
authorSir Richard <sir_richard@svn.reactos.org>
Tue, 7 Sep 2010 07:50:51 +0000 (07:50 +0000)
committerSir Richard <sir_richard@svn.reactos.org>
Tue, 7 Sep 2010 07:50:51 +0000 (07:50 +0000)
[GDI32]: Reformat GetSystemPaletteEntries away from grotesque 5-space identation (who does that?).
[GDI32]: Optimize GetSystemPaletteEntries by not zeroing over fields that get overwritten anyway.
[GDI32]: Simplify loop control, remove not-needed local variable in GetSystemPaletteEntries.

svn path=/trunk/; revision=48716

reactos/dll/win32/gdi32/objects/palette.c

index 3f44657..4301ac6 100644 (file)
@@ -86,34 +86,36 @@ GetSystemPaletteEntries(HDC hDC,
                         UINT cEntries,
                         LPPALETTEENTRY ppe)
 {
-     PALETTEENTRY ippe[256];
-     // Make this work!
-     if ((INT)cEntries < 0 ) return 0;
-
-     if ( GetDeviceCaps(hDC, RASTERCAPS) & RC_PALETTE )
-        return NtGdiDoPalette(hDC, iStartIndex, cEntries, ppe, GdiPalGetSystemEntries, FALSE);
-     else
-     {
-        if (ppe)
-        {
-           RtlZeroMemory( &ippe, sizeof(ippe) );
-           RtlCopyMemory( &ippe, &sys_pal_template, 10 * sizeof(PALETTEENTRY) );
-           RtlCopyMemory( &ippe + 246 , &sys_pal_template + 10 , 10 * sizeof(PALETTEENTRY) );
-
-           if (iStartIndex < 256)
-           {
-              UINT Index = 256 - iStartIndex;
+    PALETTEENTRY ippe[256];
 
-              if ( Index > cEntries ) Index = cEntries;
-
-              RtlCopyMemory( ppe, 
-                            &ippe[iStartIndex],
-                             Index*sizeof(PALETTEENTRY));
-           }
+    if ((INT)cEntries >= 0)
+    {
+        if (GetDeviceCaps(hDC, RASTERCAPS) & RC_PALETTE)
+        {
+            return NtGdiDoPalette(hDC,
+                                  iStartIndex,
+                                  cEntries,
+                                  ppe,
+                                  GdiPalGetSystemEntries,
+                                  FALSE);
+        }
+        else if (ppe)
+        {
+            RtlCopyMemory(ippe, sys_pal_template, 10 * sizeof(PALETTEENTRY));
+            RtlCopyMemory(&ippe[246], &sys_pal_template[10], 10 * sizeof(PALETTEENTRY));
+            RtlZeroMemory(&ippe[10], sizeof(ippe) - 20 * sizeof(PALETTEENTRY));
+            
+            if (iStartIndex < 256)
+            {
+                RtlCopyMemory(ppe, 
+                              &ippe[iStartIndex],
+                              min(256 - iStartIndex, cEntries) *
+                              sizeof(PALETTEENTRY));
+            }
         }
-     }
+    }
 
-     return 0;
+    return 0;
 }
 
 UINT