Alexandre Julliard : user32: Fix handling of bitmap header size for V4/ V5 bitmaps.

Alexandre Julliard julliard at winehq.org
Wed Apr 21 10:40:23 CDT 2010


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Apr 21 14:56:26 2010 +0200

user32: Fix handling of bitmap header size for V4/V5 bitmaps.

---

 dlls/user32/cursoricon.c |   33 +++++++--------------------------
 1 files changed, 7 insertions(+), 26 deletions(-)

diff --git a/dlls/user32/cursoricon.c b/dlls/user32/cursoricon.c
index 0fc55ad..7035c1b 100644
--- a/dlls/user32/cursoricon.c
+++ b/dlls/user32/cursoricon.c
@@ -320,7 +320,7 @@ static int bitmap_info_size( const BITMAPINFO * info, WORD coloruse )
         if (!colors && (info->bmiHeader.biBitCount <= 8))
             colors = 1 << info->bmiHeader.biBitCount;
         if (info->bmiHeader.biCompression == BI_BITFIELDS) masks = 3;
-        return sizeof(BITMAPINFOHEADER) + masks * sizeof(DWORD) + colors *
+        return info->bmiHeader.biSize + masks * sizeof(DWORD) + colors *
                ((coloruse == DIB_RGB_COLORS) ? sizeof(RGBQUAD) : sizeof(WORD));
     }
 }
@@ -380,19 +380,10 @@ static BOOL is_dib_monochrome( const BITMAPINFO* info )
  *
  * Get the info from a bitmap header.
  * Return 1 for INFOHEADER, 0 for COREHEADER,
- * 4 for V4HEADER, 5 for V5HEADER, -1 for error.
  */
 static int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width,
                               LONG *height, WORD *bpp, DWORD *compr )
 {
-    if (header->biSize == sizeof(BITMAPINFOHEADER))
-    {
-        *width  = header->biWidth;
-        *height = header->biHeight;
-        *bpp    = header->biBitCount;
-        *compr  = header->biCompression;
-        return 1;
-    }
     if (header->biSize == sizeof(BITMAPCOREHEADER))
     {
         const BITMAPCOREHEADER *core = (const BITMAPCOREHEADER *)header;
@@ -402,23 +393,13 @@ static int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width,
         *compr  = 0;
         return 0;
     }
-    if (header->biSize == sizeof(BITMAPV4HEADER))
+    else if (header->biSize >= sizeof(BITMAPINFOHEADER))
     {
-        const BITMAPV4HEADER *v4hdr = (const BITMAPV4HEADER *)header;
-        *width  = v4hdr->bV4Width;
-        *height = v4hdr->bV4Height;
-        *bpp    = v4hdr->bV4BitCount;
-        *compr  = v4hdr->bV4V4Compression;
-        return 4;
-    }
-    if (header->biSize == sizeof(BITMAPV5HEADER))
-    {
-        const BITMAPV5HEADER *v5hdr = (const BITMAPV5HEADER *)header;
-        *width  = v5hdr->bV5Width;
-        *height = v5hdr->bV5Height;
-        *bpp    = v5hdr->bV5BitCount;
-        *compr  = v5hdr->bV5Compression;
-        return 5;
+        *width  = header->biWidth;
+        *height = header->biHeight;
+        *bpp    = header->biBitCount;
+        *compr  = header->biCompression;
+        return 1;
     }
     ERR("(%d): unknown/wrong size for header\n", header->biSize );
     return -1;




More information about the wine-cvs mailing list