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);