From 0efdde1f428c51e71fba97824dd4a59149e295af Mon Sep 17 00:00:00 2001
From: Huw Davies <huw@codeweavers.com>
Date: Wed, 4 Nov 2009 11:23:18 +0000
Subject: [PATCH] oledb32/tests: Fix some failing tests on win98.

---
 dlls/oledb32/tests/convert.c | 89 +++++++++++++++++++++---------------
 include/oledberr.h           |  2 +
 2 files changed, 54 insertions(+), 37 deletions(-)

diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c
index 07b2d84e67..1f7ca082dd 100644
--- a/dlls/oledb32/tests/convert.c
+++ b/dlls/oledb32/tests/convert.c
@@ -555,26 +555,31 @@ todo_wine
     dst = 0x1234;
     ((LARGE_INTEGER*)src)->QuadPart = 0x1234abcd;
     hr = IDataConvert_DataConvert(convert, DBTYPE_I8, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
-    ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
-    ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
-    ok(dst_len == sizeof(dst), "got %d\n", dst_len);
-    ok(dst == 0x1234, "got %08x\n", dst);
-
-    dst = 0x1234;
-    ((LARGE_INTEGER*)src)->QuadPart = 0x4321;
-    hr = IDataConvert_DataConvert(convert, DBTYPE_I8, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
-    ok(hr == S_OK, "got %08x\n", hr);
-    ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
-    ok(dst_len == sizeof(dst), "got %d\n", dst_len);
-    ok(dst == 0x4321, "got %08x\n", dst);
-
-    dst = 0x1234;
-    ((ULARGE_INTEGER*)src)->QuadPart = 0x4321;
-    hr = IDataConvert_DataConvert(convert, DBTYPE_UI8, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
-    ok(hr == S_OK, "got %08x\n", hr);
-    ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
-    ok(dst_len == sizeof(dst), "got %d\n", dst_len);
-    ok(dst == 0x4321, "got %08x\n", dst);
+    ok(hr == DB_E_ERRORSOCCURRED ||
+       broken(hr == DB_E_UNSUPPORTEDCONVERSION), /* win98 */
+       "got %08x\n", hr);
+    if(hr != DB_E_UNSUPPORTEDCONVERSION) /* win98 doesn't support I8/UI8 */
+    {
+        ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
+        ok(dst_len == sizeof(dst), "got %d\n", dst_len);
+        ok(dst == 0x1234, "got %08x\n", dst);
+
+        dst = 0x1234;
+        ((LARGE_INTEGER*)src)->QuadPart = 0x4321;
+        hr = IDataConvert_DataConvert(convert, DBTYPE_I8, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
+        ok(hr == S_OK, "got %08x\n", hr);
+        ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
+        ok(dst_len == sizeof(dst), "got %d\n", dst_len);
+        ok(dst == 0x4321, "got %08x\n", dst);
+
+        dst = 0x1234;
+        ((ULARGE_INTEGER*)src)->QuadPart = 0x4321;
+        hr = IDataConvert_DataConvert(convert, DBTYPE_UI8, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
+        ok(hr == S_OK, "got %08x\n", hr);
+        ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
+        ok(dst_len == sizeof(dst), "got %d\n", dst_len);
+        ok(dst == 0x4321, "got %08x\n", dst);
+    }
 
     dst = 0x1234;
     strcpy((char *)src, "10");
@@ -798,18 +803,23 @@ todo_wine
     i4 = 0x12345678;
     ((LARGE_INTEGER*)src)->QuadPart = 0x1234abcd;
     hr = IDataConvert_DataConvert(convert, DBTYPE_I8, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
-    ok(hr == S_OK, "got %08x\n", hr);
-    ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
-    ok(dst_len == sizeof(i4), "got %d\n", dst_len);
-    ok(i4 == 0x1234abcd, "got %08x\n", i4);
-
-    i4 = 0x12345678;
-    ((ULARGE_INTEGER*)src)->QuadPart = 0x1234abcd;
-    hr = IDataConvert_DataConvert(convert, DBTYPE_UI8, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
-    ok(hr == S_OK, "got %08x\n", hr);
-    ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
-    ok(dst_len == sizeof(i4), "got %d\n", dst_len);
-    ok(i4 == 0x1234abcd, "got %08x\n", i4);
+    ok(hr == S_OK ||
+       broken(hr == DB_E_UNSUPPORTEDCONVERSION), /* win98 */
+       "got %08x\n", hr);
+    if(hr != DB_E_UNSUPPORTEDCONVERSION) /* win98 doesn't support I8/UI8 */
+    {
+        ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
+        ok(dst_len == sizeof(i4), "got %d\n", dst_len);
+        ok(i4 == 0x1234abcd, "got %08x\n", i4);
+
+        i4 = 0x12345678;
+        ((ULARGE_INTEGER*)src)->QuadPart = 0x1234abcd;
+        hr = IDataConvert_DataConvert(convert, DBTYPE_UI8, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
+        ok(hr == S_OK, "got %08x\n", hr);
+        ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
+        ok(dst_len == sizeof(i4), "got %d\n", dst_len);
+        ok(i4 == 0x1234abcd, "got %08x\n", i4);
+    }
 
     i4 = 0x12345678;
     strcpy((char *)src, "10");
@@ -1174,11 +1184,16 @@ static void test_converttofiletime(void)
     ((FILETIME *)src)->dwLowDateTime = 0x12345678;
     ((FILETIME *)src)->dwHighDateTime = 0x9abcdef0;
     hr = IDataConvert_DataConvert(convert, DBTYPE_FILETIME, DBTYPE_FILETIME, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
-    ok(hr == S_OK, "got %08x\n", hr);
-    ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
-    ok(dst_len == sizeof(dst), "got %d\n", dst_len);
-    ok(dst.dwLowDateTime == 0x12345678, "got %08x\n", dst.dwLowDateTime);
-    ok(dst.dwHighDateTime == 0x9abcdef0, "got %08x\n", dst.dwHighDateTime);
+    ok(hr == S_OK ||
+       broken(hr == DB_E_BADBINDINFO), /* win98 */
+       "got %08x\n", hr);
+    if(SUCCEEDED(hr))
+    {
+        ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
+        ok(dst_len == sizeof(dst), "got %d\n", dst_len);
+        ok(dst.dwLowDateTime == 0x12345678, "got %08x\n", dst.dwLowDateTime);
+        ok(dst.dwHighDateTime == 0x9abcdef0, "got %08x\n", dst.dwHighDateTime);
+    }
 
     IDataConvert_Release(convert);
 }
diff --git a/include/oledberr.h b/include/oledberr.h
index b53453121e..e25e40e5bf 100644
--- a/include/oledberr.h
+++ b/include/oledberr.h
@@ -21,6 +21,8 @@
 #ifndef __WINE_OLEDBERR_H
 #define __WINE_OLEDBERR_H
 
+#define DB_E_BADBINDINFO                    0x80040e08
+
 #define DB_E_NOTFOUND                       0x80040e19
 
 #define DB_E_UNSUPPORTEDCONVERSION          0x80040e1d
-- 
2.32.0.93.g670b81a890