Module: wine Branch: master Commit: 001e0543bfd5aea060053af0c76233bb90fbb43b URL: https://gitlab.winehq.org/wine/wine/-/commit/001e0543bfd5aea060053af0c76233b...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed Oct 4 14:22:34 2023 +0200
propsys: Handle VT_I4 type in VariantToString().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55708 Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
---
dlls/propsys/propvar.c | 20 +++++++++++--------- dlls/propsys/tests/propsys.c | 7 +++++++ 2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index bf77e7d51e5..c6510f9f35d 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -436,7 +436,7 @@ PCWSTR WINAPI VariantToStringWithDefault(const VARIANT *pvar, const WCHAR *defau */ HRESULT WINAPI VariantToString(REFVARIANT var, PWSTR ret, UINT cch) { - WCHAR *str = NULL; + WCHAR buffer[64], *str = buffer;
TRACE("%p, %p, %u.\n", var, ret, cch);
@@ -445,15 +445,17 @@ HRESULT WINAPI VariantToString(REFVARIANT var, PWSTR ret, UINT cch) if (!cch) return E_INVALIDARG;
- if (V_VT(var) == VT_BSTR) + switch (V_VT(var)) { - str = V_BSTR(var); - } - else - { - FIXME("Unsupported type %d.\n", V_VT(var)); - - return E_NOTIMPL; + case VT_BSTR: + str = V_BSTR(var); + break; + case VT_I4: + swprintf(buffer, ARRAY_SIZE(buffer), L"%d", V_I4(var)); + break; + default: + FIXME("Unsupported type %d.\n", V_VT(var)); + return E_NOTIMPL; }
if (wcslen(str) > cch - 1) diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index dab0537991b..a2fbb619ef2 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -2290,6 +2290,13 @@ static void test_VariantToString(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(!buff[0], "Unexpected buffer.\n");
+ buff[0] = 0; + V_VT(&v) = VT_I4; + V_I4(&v) = 567; + hr = VariantToString(&v, buff, 64); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!wcscmp(buff, L"567"), "Unexpected buffer %s.\n", wine_dbgstr_w(buff)); + V_VT(&v) = VT_BSTR; V_BSTR(&v) = SysAllocString(L"test1");