diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c index 00441c06892..27a6c88c18f 100644 --- a/dlls/gdi32/tests/bitmap.c +++ b/dlls/gdi32/tests/bitmap.c @@ -276,7 +276,7 @@ static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER { BITMAP bm; DIBSECTION ds; - INT ret, width_bytes; + INT ret, bm_width_bytes, dib_width_bytes; BYTE *buf; ret = GetObject(hbm, sizeof(bm), &bm); @@ -285,23 +285,25 @@ static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER ok(bm.bmType == 0, "wrong bm.bmType %d\n", bm.bmType); ok(bm.bmWidth == bmih->biWidth, "wrong bm.bmWidth %d\n", bm.bmWidth); ok(bm.bmHeight == bmih->biHeight, "wrong bm.bmHeight %d\n", bm.bmHeight); - width_bytes = DIB_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel); - ok(bm.bmWidthBytes == width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, width_bytes); + dib_width_bytes = DIB_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel); + bm_width_bytes = BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel); + if (bm.bmWidthBytes != dib_width_bytes) /* Win2k bug */ + ok(bm.bmWidthBytes == bm_width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, bm_width_bytes); + else + ok(bm.bmWidthBytes == dib_width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, dib_width_bytes); ok(bm.bmPlanes == bmih->biPlanes, "wrong bm.bmPlanes %d\n", bm.bmPlanes); ok(bm.bmBitsPixel == bmih->biBitCount, "bm.bmBitsPixel %d != %d\n", bm.bmBitsPixel, bmih->biBitCount); ok(bm.bmBits == bits, "wrong bm.bmBits %p != %p\n", bm.bmBits, bits); buf = HeapAlloc(GetProcessHeap(), 0, bm.bmWidthBytes * bm.bmHeight + 4096); - width_bytes = BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel); - /* GetBitmapBits returns not 32-bit aligned data */ ret = GetBitmapBits(hbm, 0, NULL); - ok(ret == width_bytes * bm.bmHeight, "%d != %d\n", ret, width_bytes * bm.bmHeight); + ok(ret == bm_width_bytes * bm.bmHeight, "%d != %d\n", ret, bm_width_bytes * bm.bmHeight); memset(buf, 0xAA, bm.bmWidthBytes * bm.bmHeight + 4096); ret = GetBitmapBits(hbm, bm.bmWidthBytes * bm.bmHeight + 4096, buf); - ok(ret == width_bytes * bm.bmHeight, "%d != %d\n", ret, width_bytes * bm.bmHeight); + ok(ret == bm_width_bytes * bm.bmHeight, "%d != %d\n", ret, bm_width_bytes * bm.bmHeight); HeapFree(GetProcessHeap(), 0, buf); @@ -331,8 +333,9 @@ static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER ok(ret == sizeof(ds), "wrong size %d\n", ret); ok(ds.dsBm.bmBits == bits, "wrong bm.bmBits %p != %p\n", ds.dsBm.bmBits, bits); - ok(ds.dsBmih.biSizeImage == ds.dsBm.bmWidthBytes * ds.dsBm.bmHeight, "%u != %u\n", - ds.dsBmih.biSizeImage, ds.dsBm.bmWidthBytes * ds.dsBm.bmHeight); + if (ds.dsBm.bmWidthBytes != bm_width_bytes) /* Win2k bug */ + ok(ds.dsBmih.biSizeImage == ds.dsBm.bmWidthBytes * ds.dsBm.bmHeight, "%u != %u\n", + ds.dsBmih.biSizeImage, ds.dsBm.bmWidthBytes * ds.dsBm.bmHeight); ok(bmih->biSizeImage == 0, "%u != 0\n", bmih->biSizeImage); ds.dsBmih.biSizeImage = 0; @@ -969,11 +972,6 @@ static void test_bitmap(void) SetLastError(0xdeadbeef); hbmp = CreateBitmap(0x7ffffff, 1, 1, 1, NULL); - ok(hbmp != 0, "CreateBitmap should not fail\n"); - DeleteObject(hbmp); - - SetLastError(0xdeadbeef); - hbmp = CreateBitmap(0x7ffffff, 9, 1, 1, NULL); if (!hbmp) { ok(GetLastError() == ERROR_NOT_ENOUGH_MEMORY, @@ -982,6 +980,13 @@ static void test_bitmap(void) else DeleteObject(hbmp); + SetLastError(0xdeadbeef); + hbmp = CreateBitmap(0x7ffffff, 9, 1, 1, NULL); + ok(!hbmp, "CreateBitmap should fail\n"); + ok(GetLastError() == ERROR_NOT_ENOUGH_MEMORY /* XP */ || + GetLastError() == ERROR_INVALID_PARAMETER /* Win2k */, + "expected ERROR_NOT_ENOUGH_MEMORY, got %u\n", GetLastError()); + SetLastError(0xdeadbeef); hbmp = CreateBitmap(0x7ffffff + 1, 1, 1, 1, NULL); ok(!hbmp, "CreateBitmap should fail\n");