From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propsys.spec | 2 +- dlls/propsys/propvar.c | 14 ++++++++++++++ dlls/propsys/tests/propsys.c | 16 ++++++++++++++++ include/propvarutil.h | 11 ++++++++++- 4 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/dlls/propsys/propsys.spec b/dlls/propsys/propsys.spec index fbaf3b575e5..f2d6bb8d5a6 100644 --- a/dlls/propsys/propsys.spec +++ b/dlls/propsys/propsys.spec @@ -116,7 +116,7 @@ @ stub PropVariantToDoubleVector @ stub PropVariantToDoubleVectorAlloc @ stub PropVariantToDoubleWithDefault -@ stub PropVariantToFileTime +@ stdcall PropVariantToFileTime(ptr long ptr) @ stub PropVariantToFileTimeVector @ stub PropVariantToFileTimeVectorAlloc @ stdcall PropVariantToGUID(ptr ptr) diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index e92e82744a4..8aed4ab2540 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -1341,3 +1341,17 @@ HRESULT WINAPI PropVariantGetStringElem(const PROPVARIANT *propvar, ULONG idx, W wcscpy(*ret, wstr); return S_OK; } + +HRESULT WINAPI PropVariantToFileTime(REFPROPVARIANT propvar, PSTIME_FLAGS flags, FILETIME *timestamp) +{ + TRACE("%p, %#x, %p\n", propvar, flags, timestamp); + + switch (propvar->vt) + { + case VT_EMPTY: + return E_INVALIDARG; + default: + FIXME("Unimplemented for type %d.\n", propvar->vt); + return E_NOTIMPL; + } +} diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index 7b4931f4652..d0c5928db01 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -3186,6 +3186,21 @@ static void test_PropertySystem(void) CoUninitialize(); }
+static void test_PropVariantToFileTime(void) +{ + PROPVARIANT propvar; + FILETIME timestamp; + HRESULT hr; + + PropVariantInit(&propvar); + timestamp.dwLowDateTime = 12; + timestamp.dwHighDateTime = 34; + hr = PropVariantToFileTime(&propvar, PSTF_LOCAL, ×tamp); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + ok(timestamp.dwLowDateTime == 12 && timestamp.dwHighDateTime == 34, + "Unexpected timestamp %#lx.%#lx.\n", timestamp.dwHighDateTime, timestamp.dwLowDateTime); +} + START_TEST(propsys) { test_InitPropVariantFromGUIDAsString(); @@ -3218,6 +3233,7 @@ START_TEST(propsys) test_VariantToPropVariant(); test_PropVariantToVariant(); test_PropVariantGetStringElem(); + test_PropVariantToFileTime();
test_PropertySystem(); } diff --git a/include/propvarutil.h b/include/propvarutil.h index e35d8c5d0d4..94885c0897d 100644 --- a/include/propvarutil.h +++ b/include/propvarutil.h @@ -78,6 +78,14 @@ enum tagPROPVAR_COMPARE_FLAGS
typedef int PROPVAR_COMPARE_FLAGS;
+enum tagPSTIME_FLAGS +{ + PSTF_UTC = 0x00000000, + PSTF_LOCAL = 0x00000001, +}; + +typedef int PSTIME_FLAGS; + PSSTDAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc, PROPVAR_CHANGE_FLAGS flags, VARTYPE vt); PSSTDAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar); @@ -86,7 +94,6 @@ PSSTDAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar); PSSTDAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar); PSSTDAPI InitPropVariantFromCLSID(REFCLSID clsid, PROPVARIANT *ppropvar); PSSTDAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar); -PSSTDAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid); PSSTDAPI VariantToGUID(const VARIANT *pvar, GUID *guid); PSSTDAPI_(INT) PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2, PROPVAR_COMPARE_UNIT uint, PROPVAR_COMPARE_FLAGS flags); @@ -94,6 +101,8 @@ PSSTDAPI InitPropVariantFromFileTime(const FILETIME *pftIn, PROPVARIANT *ppropva PSSTDAPI InitPropVariantFromStringVector(PCWSTR *strs, ULONG count, PROPVARIANT *ppropvar);
PSSTDAPI PropVariantToDouble(REFPROPVARIANT propvarIn, double *ret); +PSSTDAPI PropVariantToFileTime(REFPROPVARIANT propvar, PSTIME_FLAGS flags, FILETIME *out); +PSSTDAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid); PSSTDAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret); PSSTDAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret); PSSTDAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret);
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);