[PATCH 3/3] mscms: Set last error on insufficient buffer in EnumColorProfilesA/W.

Hans Leidekker hans at codeweavers.com
Mon Feb 25 02:12:38 CST 2019


v2: Fix test failures on systems without color profiles.

Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
 dlls/mscms/profile.c       | 12 ++++++++++--
 dlls/mscms/tests/profile.c | 33 ++++++++++++++++++---------------
 2 files changed, 28 insertions(+), 17 deletions(-)

diff --git a/dlls/mscms/profile.c b/dlls/mscms/profile.c
index 6bc55e7ae6..d45ac4af12 100644
--- a/dlls/mscms/profile.c
+++ b/dlls/mscms/profile.c
@@ -918,7 +918,11 @@ BOOL WINAPI EnumColorProfilesA( PCSTR machine, PENUMTYPEA record, PBYTE buffer,
         *p = 0;
         ret = TRUE;
     }
-    else ret = FALSE;
+    else
+    {
+        SetLastError( ERROR_INSUFFICIENT_BUFFER );
+        ret = FALSE;
+    }
 
     *size = totalsize;
     if (number) *number = count;
@@ -1044,7 +1048,11 @@ BOOL WINAPI EnumColorProfilesW( PCWSTR machine, PENUMTYPEW record, PBYTE buffer,
         *p = 0;
         ret = TRUE;
     }
-    else ret = FALSE;
+    else
+    {
+        SetLastError( ERROR_INSUFFICIENT_BUFFER );
+        ret = FALSE;
+    }
 
     *size = totalsize;
     if (number) *number = count;
diff --git a/dlls/mscms/tests/profile.c b/dlls/mscms/tests/profile.c
index c4ea7f2c9f..2ef20129e6 100644
--- a/dlls/mscms/tests/profile.c
+++ b/dlls/mscms/tests/profile.c
@@ -660,35 +660,36 @@ static void test_EnumColorProfilesA( char *standardprofile )
     record.dwDataColorSpace = SPACE_RGB;
 
     total = 0;
+    SetLastError( 0xdeadbeef );
     ret = pEnumColorProfilesA( NULL, &record, NULL, &total, &number );
-    ok( !ret, "EnumColorProfilesA() failed (%d)\n", GetLastError() );
+    ok( !ret, "EnumColorProfilesA succeeded\n" );
+    if (have_color_profile) ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got %u\n", GetLastError() );
     buffer = HeapAlloc( GetProcessHeap(), 0, total );
 
     size = total;
     ret = pEnumColorProfilesA( machine, &record, buffer, &size, &number );
-    ok( !ret, "EnumColorProfilesA() succeeded (%d)\n", GetLastError() );
+    ok( !ret, "EnumColorProfilesA succeeded\n" );
 
     ret = pEnumColorProfilesA( NULL, NULL, buffer, &size, &number );
-    ok( !ret, "EnumColorProfilesA() succeeded (%d)\n", GetLastError() );
+    ok( !ret, "EnumColorProfilesA succeeded\n" );
 
     ret = pEnumColorProfilesA( NULL, &record, buffer, NULL, &number );
-    ok( !ret, "EnumColorProfilesA() succeeded (%d)\n", GetLastError() );
+    ok( !ret, "EnumColorProfilesA succeeded\n" );
 
     ret = pEnumColorProfilesA( NULL, &record, buffer, &size, &number );
     todo_wine_if (!have_color_profile)
-        ok( ret, "EnumColorProfilesA() failed (%d)\n", GetLastError() );
+        ok( ret, "EnumColorProfilesA failed %u\n", GetLastError() );
 
     size = 0;
-
     ret = pEnumColorProfilesA( NULL, &record, buffer, &size, &number );
-    ok( !ret, "EnumColorProfilesA() succeeded (%d)\n", GetLastError() );
+    ok( !ret, "EnumColorProfilesA succeeded\n" );
 
     /* Functional checks */
 
     size = total;
     ret = pEnumColorProfilesA( NULL, &record, buffer, &size, &number );
     todo_wine_if (!have_color_profile)
-        ok( ret, "EnumColorProfilesA() failed (%d)\n", GetLastError() );
+        ok( ret, "EnumColorProfilesA failed %u\n", GetLastError() );
 
     HeapFree( GetProcessHeap(), 0, buffer );
 }
@@ -710,34 +711,36 @@ static void test_EnumColorProfilesW( WCHAR *standardprofileW )
     record.dwDataColorSpace = SPACE_RGB;
 
     total = 0;
+    SetLastError( 0xdeadbeef );
     ret = pEnumColorProfilesW( NULL, &record, NULL, &total, &number );
-    ok( !ret, "EnumColorProfilesW() failed (%d)\n", GetLastError() );
+    ok( !ret, "EnumColorProfilesW succeeded\n" );
+    if (have_color_profile) ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got %u\n", GetLastError() );
     buffer = HeapAlloc( GetProcessHeap(), 0, total * sizeof(WCHAR) );
 
     size = total;
     ret = pEnumColorProfilesW( machineW, &record, buffer, &size, &number );
-    ok( !ret, "EnumColorProfilesW() succeeded (%d)\n", GetLastError() );
+    ok( !ret, "EnumColorProfilesW succeeded\n" );
 
     ret = pEnumColorProfilesW( NULL, NULL, buffer, &size, &number );
-    ok( !ret, "EnumColorProfilesW() succeeded (%d)\n", GetLastError() );
+    ok( !ret, "EnumColorProfilesW succeeded\n" );
 
     ret = pEnumColorProfilesW( NULL, &record, buffer, NULL, &number );
-    ok( !ret, "EnumColorProfilesW() succeeded (%d)\n", GetLastError() );
+    ok( !ret, "EnumColorProfilesW succeeded\n" );
 
     ret = pEnumColorProfilesW( NULL, &record, buffer, &size, &number );
     todo_wine_if (!have_color_profile)
-        ok( ret, "EnumColorProfilesW() failed (%d)\n", GetLastError() );
+        ok( ret, "EnumColorProfilesW failed %u\n", GetLastError() );
 
     size = 0;
     ret = pEnumColorProfilesW( NULL, &record, buffer, &size, &number );
-    ok( !ret, "EnumColorProfilesW() succeeded (%d)\n", GetLastError() );
+    ok( !ret, "EnumColorProfilesW succeeded\n" );
 
     /* Functional checks */
 
     size = total;
     ret = pEnumColorProfilesW( NULL, &record, buffer, &size, &number );
     todo_wine_if (!have_color_profile)
-        ok( ret, "EnumColorProfilesW() failed (%d)\n", GetLastError() );
+        ok( ret, "EnumColorProfilesW failed %u\n", GetLastError() );
 
     HeapFree( GetProcessHeap(), 0, buffer );
 }
-- 
2.11.0




More information about the wine-devel mailing list