diff --git a/dlls/oleaut32/tests/usrmarshal.c b/dlls/oleaut32/tests/usrmarshal.c index 4f7b8431e45..8bee7ff0689 100644 --- a/dlls/oleaut32/tests/usrmarshal.c +++ b/dlls/oleaut32/tests/usrmarshal.c @@ -711,29 +711,35 @@ static const IUnknownVtbl HeapUnknown_Vtbl = HeapUnknown_Release }; -static void check_variant_header(DWORD *wirev, VARIANT *v, ULONG size) +typedef struct { - WORD *wp; + DWORD clSize; + DWORD rpcReserved; + USHORT vt; + USHORT wReserved1; + USHORT wReserved2; + USHORT wReserved3; + DWORD switch_is; +} variant_wire_t; + +static DWORD *check_variant_header(DWORD *wirev, VARIANT *v, ULONG size) +{ + const variant_wire_t *header = (const variant_wire_t*)wirev; DWORD switch_is; - ok(*wirev == (size + 7) >> 3, "wv[0] %08x, expected %08x\n", *wirev, (size + 7) >> 3); - wirev++; - ok(*wirev == 0, "wv[1] %08x\n", *wirev); - wirev++; - wp = (WORD*)wirev; - ok(*wp == V_VT(v), "vt %04x expected %04x\n", *wp, V_VT(v)); - wp++; - ok(*wp == V_U2(v).wReserved1, "res1 %04x expected %04x\n", *wp, V_U2(v).wReserved1); - wp++; - ok(*wp == V_U2(v).wReserved2, "res2 %04x expected %04x\n", *wp, V_U2(v).wReserved2); - wp++; - ok(*wp == V_U2(v).wReserved3, "res3 %04x expected %04x\n", *wp, V_U2(v).wReserved3); - wp++; - wirev = (DWORD*)wp; + ok(header->clSize == (size + 7) >> 3, "wv[0] %08x, expected %08x\n", header->clSize, (size + 7) >> 3); + ok(header->rpcReserved == 0, "wv[1] %08x\n", header->rpcReserved); + ok(header->vt == V_VT(v), "vt %04x expected %04x\n", header->vt, V_VT(v)); + ok(header->wReserved1 == V_U2(v).wReserved1, "res1 %04x expected %04x\n", header->wReserved1, V_U2(v).wReserved1); + ok(header->wReserved2 == V_U2(v).wReserved2, "res2 %04x expected %04x\n", header->wReserved2, V_U2(v).wReserved2); + ok(header->wReserved3 == V_U2(v).wReserved3, "res3 %04x expected %04x\n", header->wReserved3, V_U2(v).wReserved3); + switch_is = V_VT(v); if(switch_is & VT_ARRAY) switch_is &= ~VT_TYPEMASK; - ok(*wirev == switch_is, "switch_is %08x expected %08x\n", *wirev, switch_is); + ok(header->switch_is == switch_is, "switch_is %08x expected %08x\n", header->switch_is, switch_is); + + return (DWORD*)((unsigned char*)wirev + sizeof(variant_wire_t)); } /* Win9x and WinME don't always align as needed. Variants have @@ -802,8 +808,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*(char*)wirev == V_I1(&v), "wv[5] %08x\n", *wirev); VariantInit(&v2); stubMsg.Buffer = buffer; @@ -829,8 +834,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*(short*)wirev == V_I2(&v), "wv[5] %08x\n", *wirev); VariantInit(&v2); stubMsg.Buffer = buffer; @@ -857,8 +861,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*wirev == 0x4, "wv[5] %08x\n", *wirev); wirev++; ok(*(short*)wirev == s, "wv[6] %08x\n", *wirev); @@ -889,8 +892,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*wirev == V_I4(&v), "wv[5] %08x\n", *wirev); VariantInit(&v2); @@ -917,8 +919,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*wirev == 0x1234, "wv[5] %08x\n", *wirev); VariantInit(&v2); stubMsg.Buffer = buffer; @@ -945,8 +946,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*wirev == 0x4, "wv[5] %08x\n", *wirev); wirev++; ok(*wirev == ul, "wv[6] %08x\n", *wirev); @@ -975,8 +975,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*(float*)wirev == V_R4(&v), "wv[5] %08x\n", *wirev); VariantInit(&v2); stubMsg.Buffer = buffer; @@ -1003,8 +1002,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*wirev == 0xcccccccc, "wv[5] %08x\n", *wirev); /* pad */ wirev++; ok(*(double*)wirev == V_R8(&v), "wv[6] %08x, wv[7] %08x\n", *wirev, *(wirev+1)); @@ -1033,8 +1031,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*wirev == 8, "wv[5] %08x\n", *wirev); wirev++; ok(*(double*)wirev == d, "wv[6] %08x wv[7] %08x\n", *wirev, *(wirev+1)); @@ -1062,8 +1059,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*(short*)wirev == V_BOOL(&v), "wv[5] %04x\n", *(WORD*)wirev); VariantInit(&v2); stubMsg.Buffer = buffer; @@ -1092,8 +1088,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*wirev == 0xcccccccc, "wirev[5] %08x\n", *wirev); /* pad */ wirev++; dec2 = dec; @@ -1124,8 +1119,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*wirev == 16, "wv[5] %08x\n", *wirev); wirev++; ok(!memcmp(wirev, &dec, sizeof(dec)), "wirev[6] %08x wirev[7] %08x wirev[8] %08x wirev[9] %08x\n", *wirev, *(wirev + 1), *(wirev + 2), *(wirev + 3)); @@ -1206,8 +1200,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*wirev, "wv[5] %08x\n", *wirev); /* win2k: this is b. winxp: this is (char*)b + 1 */ wirev++; check_bstr(wirev, V_BSTR(&v)); @@ -1235,8 +1228,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*wirev == 0x4, "wv[5] %08x\n", *wirev); wirev++; ok(*wirev, "wv[6] %08x\n", *wirev); /* win2k: this is b. winxp: this is (char*)b + 1 */ @@ -1276,8 +1268,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + expected, "got %p expect %p\n", next, buffer + expected); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, expected); - wirev += 5; + wirev = check_variant_header(wirev, &v, expected); ok(*wirev, "wv[5] %08x\n", *wirev); /* win2k: this is lpsa. winxp: this is (char*)lpsa + 1 */ wirev++; check_safearray(wirev, lpsa); @@ -1317,8 +1308,7 @@ static void test_marshal_VARIANT(void) ok(next == buffer + expected, "got %p expect %p\n", next, buffer + expected); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, expected); - wirev += 5; + wirev = check_variant_header(wirev, &v, expected); ok(*wirev == 4, "wv[5] %08x\n", *wirev); wirev++; ok(*wirev, "wv[6] %08x\n", *wirev); /* win2k: this is lpsa. winxp: this is (char*)lpsa + 1 */ @@ -1363,8 +1353,7 @@ static void test_marshal_VARIANT(void) next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; + wirev = check_variant_header(wirev, &v, stubMsg.BufferLength); ok(*wirev == sizeof(VARIANT), "wv[5] %08x\n", *wirev); wirev++; @@ -1372,8 +1361,7 @@ static void test_marshal_VARIANT(void) wirev++; ok(*wirev == 0xcccccccc, "wv[7] %08x\n", *wirev); /* pad */ wirev++; - check_variant_header(wirev, &v2, stubMsg.BufferLength - 32); - wirev += 5; + wirev = check_variant_header(wirev, &v2, stubMsg.BufferLength - 32); ok(*wirev == 0xcccccccc, "wv[13] %08x\n", *wirev); /* pad for VT_R8 */ wirev++; ok(*(double*)wirev == V_R8(&v2), "wv[6] %08x wv[7] %08x\n", *wirev, *(wirev+1)); @@ -1404,8 +1392,7 @@ static void test_marshal_VARIANT(void) memset(buffer, 0xcc, stubMsg.BufferLength); next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, next - buffer); - wirev += 5; + wirev = check_variant_header(wirev, &v, next - buffer); todo_wine ok(*wirev == (DWORD_PTR)V_UNKNOWN(&v) /* Win9x */ || @@ -1444,8 +1431,7 @@ static void test_marshal_VARIANT(void) memset(buffer, 0xcc, stubMsg.BufferLength); next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, next - buffer); - wirev += 5; + wirev = check_variant_header(wirev, &v, next - buffer); ok(*wirev == 0, "wv[5] %08x\n", *wirev); VariantInit(&v2); @@ -1472,8 +1458,7 @@ static void test_marshal_VARIANT(void) memset(buffer, 0xcc, stubMsg.BufferLength); next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, next - buffer); - wirev += 5; + wirev = check_variant_header(wirev, &v, next - buffer); ok(*wirev == 4, "wv[5] %08x\n", *wirev); wirev++;