From: Nikolay Sivov nsivov@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=58716 Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propsys.spec | 2 +- dlls/propsys/propvar.c | 17 +++++++++++++++++ dlls/propsys/tests/propsys.c | 16 ++++++++++++++++ include/propvarutil.h | 1 + 4 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/dlls/propsys/propsys.spec b/dlls/propsys/propsys.spec index f2d6bb8d5a6..28245452f6f 100644 --- a/dlls/propsys/propsys.spec +++ b/dlls/propsys/propsys.spec @@ -143,7 +143,7 @@ @ stub PropVariantToUInt16VectorAlloc @ stub PropVariantToUInt16WithDefault @ stdcall PropVariantToUInt32(ptr ptr) -@ stub PropVariantToUInt32Vector +@ stdcall PropVariantToUInt32Vector(ptr ptr long ptr) @ stub PropVariantToUInt32VectorAlloc @ stdcall PropVariantToUInt32WithDefault(ptr long) @ stdcall PropVariantToUInt64(ptr ptr) diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index 8aed4ab2540..e564e1adf36 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -1355,3 +1355,20 @@ HRESULT WINAPI PropVariantToFileTime(REFPROPVARIANT propvar, PSTIME_FLAGS flags, return E_NOTIMPL; } } + +HRESULT WINAPI PropVariantToUInt32Vector(REFPROPVARIANT propvar, ULONG *buffer, ULONG size, ULONG *count) +{ + TRACE("%p, %p, %lu, %p.\n", propvar, buffer, size, count); + + *count = 0; + + switch (propvar->vt) + { + case VT_EMPTY: + return E_INVALIDARG; + default: + FIXME("Unimplemented for type %d.\n", propvar->vt); + return E_NOTIMPL; + } + return E_NOTIMPL; +} diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index d0c5928db01..17c9e87d7ef 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -3201,6 +3201,21 @@ static void test_PropVariantToFileTime(void) "Unexpected timestamp %#lx.%#lx.\n", timestamp.dwHighDateTime, timestamp.dwLowDateTime); }
+static void test_PropVariantToUInt32Vector(void) +{ + ULONG buffer[16], count; + PROPVARIANT propvar; + HRESULT hr; + + PropVariantInit(&propvar); + buffer[0] = 1; + count = 0xabc; + hr = PropVariantToUInt32Vector(&propvar, buffer, ARRAY_SIZE(buffer), &count); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + ok(buffer[0] == 1, "Unexpected contents %#lx.\n", buffer[0]); + ok(!count, "Unexpected count %#lx.\n", count); +} + START_TEST(propsys) { test_InitPropVariantFromGUIDAsString(); @@ -3234,6 +3249,7 @@ START_TEST(propsys) test_PropVariantToVariant(); test_PropVariantGetStringElem(); test_PropVariantToFileTime(); + test_PropVariantToUInt32Vector();
test_PropertySystem(); } diff --git a/include/propvarutil.h b/include/propvarutil.h index 94885c0897d..952f0effd37 100644 --- a/include/propvarutil.h +++ b/include/propvarutil.h @@ -108,6 +108,7 @@ PSSTDAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret); PSSTDAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret); PSSTDAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret); PSSTDAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret); +PSSTDAPI PropVariantToUInt32Vector(REFPROPVARIANT propvar, ULONG *buffer, ULONG size, ULONG *count); PSSTDAPI_(ULONG) PropVariantToUInt32WithDefault(REFPROPVARIANT propvarIn, ULONG uLDefault); PSSTDAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret); PSSTDAPI PropVariantToBoolean(REFPROPVARIANT propvarIn, BOOL *ret);