From 574b14f02386202a12b63f7546c6c9dd2a8f49fa Mon Sep 17 00:00:00 2001 From: Reece Dunn Date: Tue, 22 Jul 2008 19:59:44 +0100 Subject: [PATCH] oleaut32: fix the SafeArrayGetVartype tests on Vista and use that behaviour. --- dlls/oleaut32/safearray.c | 2 ++ dlls/oleaut32/tests/safearray.c | 32 +++++++++++--------------------- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/dlls/oleaut32/safearray.c b/dlls/oleaut32/safearray.c index 34cfd91..a19d599 100644 --- a/dlls/oleaut32/safearray.c +++ b/dlls/oleaut32/safearray.c @@ -1500,6 +1500,8 @@ HRESULT WINAPI SafeArrayGetVartype(SAFEARRAY* psa, VARTYPE* pvt) if (psa->fFeatures & FADF_RECORD) *pvt = VT_RECORD; + else if ((psa->fFeatures & (FADF_HAVEIID|FADF_DISPATCH)) == (FADF_HAVEIID|FADF_DISPATCH)) + *pvt = VT_DISPATCH; else if (psa->fFeatures & FADF_HAVEIID) *pvt = VT_UNKNOWN; else if (psa->fFeatures & FADF_HAVEVARTYPE) diff --git a/dlls/oleaut32/tests/safearray.c b/dlls/oleaut32/tests/safearray.c index 53896ef..c5023bb 100644 --- a/dlls/oleaut32/tests/safearray.c +++ b/dlls/oleaut32/tests/safearray.c @@ -490,12 +490,8 @@ static void test_safearray(void) { hres = pSafeArrayGetVartype(a, &vt); ok(hres == S_OK, "SAGVT of arra y with vt %d failed with %x\n", vttypes[i].vt, hres); - if (vttypes[i].vt == VT_DISPATCH) { - /* Special case. Checked against Windows. */ - ok(vt == VT_UNKNOWN, "SAGVT of array with VT_DISPATCH returned not VT_UNKNOWN, but %d\n", vt); - } else { - ok(vt == vttypes[i].vt, "SAGVT of array with vt %d returned %d\n", vttypes[i].vt, vt); - } + /* Windows prior to Vista returns VT_UNKNOWN instead of VT_DISPATCH */ + ok(broken(vt == VT_UNKNOWN) || vt == vttypes[i].vt, "SAGVT of array with vt %d returned %d\n", vttypes[i].vt, vt); } hres = SafeArrayCopy(a, &c); @@ -509,12 +505,8 @@ static void test_safearray(void) if (pSafeArrayGetVartype) { hres = pSafeArrayGetVartype(c, &vt); ok(hres == S_OK, "SAGVT of array with vt %d failed with %x\n", vttypes[i].vt, hres); - if (vttypes[i].vt == VT_DISPATCH) { - /* Special case. Checked against Windows. */ - ok(vt == VT_UNKNOWN, "SAGVT of array with VT_DISPATCH returned not VT_UNKNOWN, but %d\n", vt); - } else { - ok(vt == vttypes[i].vt, "SAGVT of array with vt %d returned %d\n", vttypes[i].vt, vt); - } + /* Windows prior to Vista returns VT_UNKNOWN instead of VT_DISPATCH */ + ok(broken(vt == VT_UNKNOWN) || vt == vttypes[i].vt, "SAGVT of array with vt %d returned %d\n", vttypes[i].vt, vt); } if (pSafeArrayCopyData) { @@ -628,15 +620,13 @@ static void test_safearray(void) ok(vttypes[i].vt == ((DWORD*)a)[-1], "FADF_HAVEVARTYPE set, but vt %d mismatch stored %d\n",vttypes[i].vt,((DWORD*)a)[-1]); } - hres = pSafeArrayGetVartype(a, &vt); - ok(hres == S_OK, "SAGVT of array with vt %d failed with %x\n", vttypes[i].vt, hres); - - if (vttypes[i].vt == VT_DISPATCH) { - /* Special case. Checked against Windows. */ - ok(vt == VT_UNKNOWN, "SAGVT of array with VT_DISPATCH returned not VT_UNKNOWN, but %d\n", vt); - } else { - ok(vt == vttypes[i].vt, "SAGVT of array with vt %d returned %d\n", vttypes[i].vt, vt); - } + if (pSafeArrayGetVartype) + { + hres = pSafeArrayGetVartype(a, &vt); + ok(hres == S_OK, "SAGVT of array with vt %d failed with %x\n", vttypes[i].vt, hres); + /* Windows prior to Vista returns VT_UNKNOWN instead of VT_DISPATCH */ + ok(broken(vt == VT_UNKNOWN) || vt == vttypes[i].vt, "SAGVT of array with vt %d returned %d\n", vttypes[i].vt, vt); + } if (a->fFeatures & FADF_HAVEIID) { hres = pSafeArraySetIID(a, &IID_IStorage); /* random IID */ -- 1.5.6.1.1071.g76fb