propsys: Partially implement VariantToString().

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55708
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
This commit is contained in:
Nikolay Sivov 2023-10-03 18:41:11 +02:00 committed by Alexandre Julliard
parent 0770ba61ce
commit f7ef02bd8f
4 changed files with 64 additions and 1 deletions

View file

@ -190,7 +190,7 @@
@ stub VariantToInt64WithDefault
@ stub VariantToPropVariant
@ stub VariantToStrRet
@ stub VariantToString
@ stdcall VariantToString(ptr ptr long)
@ stub VariantToStringAlloc
@ stub VariantToStringArray
@ stub VariantToStringArrayAlloc

View file

@ -431,6 +431,38 @@ PCWSTR WINAPI VariantToStringWithDefault(const VARIANT *pvar, const WCHAR *defau
return default_value;
}
/******************************************************************
* VariantToString (PROPSYS.@)
*/
HRESULT WINAPI VariantToString(REFVARIANT var, PWSTR ret, UINT cch)
{
WCHAR *str = NULL;
TRACE("%p, %p, %u.\n", var, ret, cch);
*ret = 0;
if (!cch)
return E_INVALIDARG;
if (V_VT(var) == VT_BSTR)
{
str = V_BSTR(var);
}
else
{
FIXME("Unsupported type %d.\n", V_VT(var));
return E_NOTIMPL;
}
if (wcslen(str) > cch - 1)
return STRSAFE_E_INSUFFICIENT_BUFFER;
wcscpy(ret, str);
return S_OK;
}
/******************************************************************
* PropVariantChangeType (PROPSYS.@)
*/

View file

@ -2277,6 +2277,35 @@ static void test_VariantToStringWithDefault(void)
SysFreeString(b);
}
static void test_VariantToString(void)
{
HRESULT hr;
VARIANT v;
WCHAR buff[64];
buff[0] = 1;
V_VT(&v) = VT_EMPTY;
hr = VariantToString(&v, buff, 64);
todo_wine
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!buff[0], "Unexpected buffer.\n");
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = SysAllocString(L"test1");
buff[0] = 1;
hr = VariantToString(&v, buff, 0);
ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
ok(!buff[0], "Unexpected buffer.\n");
hr = VariantToString(&v, buff, 5);
ok(hr == STRSAFE_E_INSUFFICIENT_BUFFER, "Unexpected hr %#lx.\n", hr);
hr = VariantToString(&v, buff, 6);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!wcscmp(buff, L"test1"), "Unexpected string.\n");
VariantClear(&v);
}
START_TEST(propsys)
{
test_InitPropVariantFromGUIDAsString();
@ -2304,4 +2333,5 @@ START_TEST(propsys)
test_propertystore();
test_PSCreatePropertyStoreFromObject();
test_VariantToStringWithDefault();
test_VariantToString();
}

View file

@ -95,6 +95,7 @@ HRESULT WINAPI PropVariantToBuffer(REFPROPVARIANT propvarIn, void *ret, UINT cb)
HRESULT WINAPI PropVariantToString(REFPROPVARIANT propvarIn, PWSTR ret, UINT cch);
PCWSTR WINAPI PropVariantToStringWithDefault(REFPROPVARIANT propvarIn, LPCWSTR pszDefault);
PCWSTR WINAPI VariantToStringWithDefault(const VARIANT *pvar, LPCWSTR pszDefault);
HRESULT WINAPI VariantToString(REFVARIANT var, PWSTR ret, UINT cch);
HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret);