Nikolay Sivov : propsys: Add InitPropVariantFromCLSID().
Alexandre Julliard
julliard at winehq.org
Sun Mar 3 13:21:25 CST 2019
Module: wine
Branch: oldstable
Commit: 7e46c78259c9425ba6b4ae43673f7fcfafca8564
URL: https://source.winehq.org/git/wine.git/?a=commit;h=7e46c78259c9425ba6b4ae43673f7fcfafca8564
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sun Sep 16 16:48:41 2018 +0300
propsys: Add InitPropVariantFromCLSID().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45347
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 6fbf6c330b3a9eb038cc380fd1c54199b7ce2e47)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
dlls/propsys/propsys.spec | 2 +-
dlls/propsys/propvar.c | 13 +++++++++++++
dlls/propsys/tests/propsys.c | 19 +++++++++++++++++++
include/propvarutil.h | 1 +
4 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/dlls/propsys/propsys.spec b/dlls/propsys/propsys.spec
index db20fd3..bbc7165 100644
--- a/dlls/propsys/propsys.spec
+++ b/dlls/propsys/propsys.spec
@@ -29,7 +29,7 @@
@ stdcall -private DllUnregisterServer()
@ stub InitPropVariantFromBooleanVector
@ stdcall InitPropVariantFromBuffer(ptr long ptr)
-@ stub InitPropVariantFromCLSID
+@ stdcall InitPropVariantFromCLSID(ptr ptr)
@ stub InitPropVariantFromDoubleVector
@ stub InitPropVariantFromFileTime
@ stub InitPropVariantFromFileTimeVector
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c
index e6d4eba..ae96e4e 100644
--- a/dlls/propsys/propvar.c
+++ b/dlls/propsys/propvar.c
@@ -570,6 +570,19 @@ HRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *p
return S_OK;
}
+HRESULT WINAPI InitPropVariantFromCLSID(REFCLSID clsid, PROPVARIANT *ppropvar)
+{
+ TRACE("(%s %p)\n", debugstr_guid(clsid), ppropvar);
+
+ ppropvar->u.puuid = CoTaskMemAlloc(sizeof(*ppropvar->u.puuid));
+ if(!ppropvar->u.puuid)
+ return E_OUTOFMEMORY;
+
+ ppropvar->vt = VT_CLSID;
+ memcpy(ppropvar->u.puuid, clsid, sizeof(*ppropvar->u.puuid));
+ return S_OK;
+}
+
HRESULT WINAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar)
{
SAFEARRAY *arr;
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c
index a6c7023..3868e67 100644
--- a/dlls/propsys/tests/propsys.c
+++ b/dlls/propsys/tests/propsys.c
@@ -1230,6 +1230,24 @@ static void test_PropVariantChangeType_LPWSTR(void)
PropVariantClear(&src);
}
+static void test_InitPropVariantFromCLSID(void)
+{
+ PROPVARIANT propvar;
+ GUID clsid;
+ HRESULT hr;
+
+ memset(&propvar, 0, sizeof(propvar));
+ propvar.vt = VT_I4;
+ propvar.u.lVal = 15;
+
+ memset(&clsid, 0xcc, sizeof(clsid));
+ hr = InitPropVariantFromCLSID(&clsid, &propvar);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(propvar.vt == VT_CLSID, "Unexpected type %d.\n", propvar.vt);
+ ok(IsEqualGUID(propvar.u.puuid, &clsid), "Unexpected puuid value.\n");
+ PropVariantClear(&propvar);
+}
+
START_TEST(propsys)
{
test_PSStringFromPropertyKey();
@@ -1244,4 +1262,5 @@ START_TEST(propsys)
test_PropVariantChangeType_LPWSTR();
test_PropVariantToBoolean();
test_PropVariantToStringWithDefault();
+ test_InitPropVariantFromCLSID();
}
diff --git a/include/propvarutil.h b/include/propvarutil.h
index ced51ec..0285caf 100644
--- a/include/propvarutil.h
+++ b/include/propvarutil.h
@@ -64,6 +64,7 @@ HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT p
HRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar);
HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar);
HRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar);
+HRESULT WINAPI InitPropVariantFromCLSID(REFCLSID clsid, PROPVARIANT *ppropvar);
HRESULT WINAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar);
HRESULT WINAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid);
HRESULT WINAPI VariantToGUID(const VARIANT *pvar, GUID *guid);
More information about the wine-cvs
mailing list