From: Ziqing Hui zhui@codeweavers.com
--- dlls/propsys/propvar.c | 26 +++++++++++++++++--------- dlls/propsys/tests/propsys.c | 4 ---- 2 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index 6500926380f..c54fe868ee3 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -36,6 +36,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(propsys);
+#define GUID_STR_LEN 38 static HRESULT VARIANT_ValidateType(VARTYPE vt) { VARTYPE vtExtra = vt & (VT_VECTOR | VT_ARRAY | VT_BYREF | VT_RESERVED); @@ -177,6 +178,13 @@ static HRESULT PROPVAR_ConvertNumber(REFPROPVARIANT pv, int dest_bits, return S_OK; }
+static void PROPVAR_GUIDToWSTR(REFGUID guid, WCHAR *str) +{ + swprintf(str, GUID_STR_LEN + 1, L"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", guid->Data1, + guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1], guid->Data4[2], + guid->Data4[3], guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]); +} + HRESULT WINAPI PropVariantToDouble(REFPROPVARIANT propvarIn, double *ret) { LONGLONG res; @@ -356,7 +364,6 @@ HRESULT WINAPI PropVariantToBuffer(REFPROPVARIANT propvarIn, void *ret, UINT cb) return hr; }
- HRESULT WINAPI PropVariantToString(REFPROPVARIANT propvarIn, PWSTR ret, UINT cch) { HRESULT hr; @@ -421,6 +428,15 @@ HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret) } break;
+ case VT_CLSID: + if (propvarIn->puuid) + { + if (!(res = CoTaskMemAlloc((GUID_STR_LEN + 1) * sizeof(WCHAR)))) + return E_OUTOFMEMORY; + PROPVAR_GUIDToWSTR(propvarIn->puuid, res); + } + break; + default: FIXME("Unsupported conversion (%d)\n", propvarIn->vt); hr = E_FAIL; @@ -654,14 +670,6 @@ HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT p return E_FAIL; } } - -static void PROPVAR_GUIDToWSTR(REFGUID guid, WCHAR *str) -{ - swprintf(str, 39, L"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", guid->Data1, - guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1], guid->Data4[2], - guid->Data4[3], guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]); -} - HRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar) { TRACE("(%p %p)\n", guid, ppropvar); diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index 2231bb2e16c..ae46011e983 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -667,9 +667,7 @@ static void test_PropVariantToStringAlloc(void) prop.vt = VT_CLSID; prop.puuid = (CLSID *)&dummy_guid; hres = PropVariantToStringAlloc(&prop, &str); - todo_wine ok(hres == S_OK, "PropVariantToStringAlloc returned %#lx.\n", hres); - if (hres == S_OK) ok(!wcscmp(str, dummy_guid_str), "Unexpected str %s.\n", debugstr_w(str)); CoTaskMemFree(str); } @@ -1618,9 +1616,7 @@ static void test_PropVariantToString(void) propvar.vt = VT_CLSID; propvar.puuid = (CLSID *)&dummy_guid; hr = PropVariantToString(&propvar, bufferW, ARRAY_SIZE(bufferW)); - todo_wine ok(hr == S_OK, "PropVariantToString returned %#lx.\n", hr); - todo_wine ok(!wcscmp(bufferW, dummy_guid_str), "Unexpected string %s.\n", debugstr_w(bufferW)); memset(bufferW, 0, sizeof(bufferW)); }