Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
-- v2: propsys: Implement PropVariantToStringAlloc(VT_UI8). propsys: Implement PropVariantToStringAlloc(VT_I8). propsys: Implement PropVariantToStringAlloc(VT_UI4). propsys: Implement PropVariantToStringAlloc(VT_UI1). propsys: Implement PropVariantToStringAlloc(VT_I1). propsys: Implement PropVariantToStringAlloc(VT_I2). propsys: Implement PropVariantToStringAlloc(VT_I4). propsys: Implement PropVariantToStringAlloc(VT_UI2). propsys/tests: Add some tests for PropVariantChangeType(VT_UI4).
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/tests/propsys.c | 93 +++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-)
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index d63b9ddd3b2..b266813cc91 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1421,6 +1421,97 @@ static void test_PropVariantChangeType_LPWSTR(void) PropVariantClear(&src); }
+static void test_PropVariantChangeType_UI4(void) +{ + static const struct + { + const char *strA; + const WCHAR *str; + unsigned int value; + HRESULT hr; + } + string_to_ui4[] = + { + { "0x123", L"0x123", 0x123 }, + { "1", L"1", 1 }, + { "+1", L"+1", 1 }, + + { "-1", L"-1", 0, TYPE_E_TYPEMISMATCH }, + }; + PROPVARIANT dest, src; + size_t len; + HRESULT hr; + + PropVariantInit(&dest); + + src.vt = VT_NULL; + dest.vt = VT_UI2; + dest.ulVal = 0xffbb; + hr = PropVariantChangeType(&dest, &src, 0, VT_UI4); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + if (SUCCEEDED(hr)) + { + ok(dest.vt == VT_UI4, "Unexpected type %d.\n", dest.vt); + ok(dest.ulVal == 0, "Unexpected value %u.\n", dest.uiVal); + } + + for (int i = 0; i < ARRAY_SIZE(string_to_ui4); ++i) + { + len = strlen(string_to_ui4[i].strA); + src.vt = VT_LPSTR; + src.pszVal = CoTaskMemAlloc(len + 1); + strcpy(src.pszVal, string_to_ui4[i].strA); + dest.vt = VT_UI2; + dest.ulVal = 0xffbb; + hr = PropVariantChangeType(&dest, &src, 0, VT_UI4); + todo_wine_if(i == 3) + ok(hr == string_to_ui4[i].hr, "Unexpected hr %#lx.\n", hr); + if (SUCCEEDED(hr)) + { + ok(dest.vt == VT_UI4, "Unexpected type %d.\n", dest.vt); + ok(dest.ulVal == string_to_ui4[i].value, "Unexpected value %lu.\n", dest.ulVal); + } + else + { + todo_wine + ok(dest.vt == VT_EMPTY, "Unexpected type %d.\n", dest.vt); + todo_wine + ok(!dest.ulVal, "Unexpected value %lu.\n", dest.ulVal); + } + PropVariantClear(&src); + + len = lstrlenW(string_to_ui4[i].str); + src.vt = VT_LPWSTR; + src.pwszVal = CoTaskMemAlloc((len + 1) * sizeof(WCHAR)); + lstrcpyW(src.pwszVal, string_to_ui4[i].str); + dest.vt = VT_UI2; + dest.ulVal = 0xffbb; + hr = PropVariantChangeType(&dest, &src, 0, VT_UI4); + todo_wine_if(i == 3) + ok(hr == string_to_ui4[i].hr, "Unexpected hr %#lx.\n", hr); + if (SUCCEEDED(hr)) + { + ok(dest.vt == VT_UI4, "Unexpected type %d.\n", dest.vt); + ok(dest.ulVal == string_to_ui4[i].value, "Unexpected value %lu.\n", dest.ulVal); + } + else + { + todo_wine + ok(dest.vt == VT_EMPTY, "Unexpected type %d.\n", dest.vt); + todo_wine + ok(!dest.ulVal, "Unexpected value %lu.\n", dest.ulVal); + } + PropVariantClear(&src); + } +} + +static void test_PropVariantChangeType(void) +{ + test_PropVariantChangeType_LPWSTR(); + test_PropVariantChangeType_UI4(); +} + static void test_InitPropVariantFromCLSID(void) { PROPVARIANT propvar; @@ -2641,7 +2732,7 @@ START_TEST(propsys) test_PropVariantToStringAlloc(); test_PropVariantCompareEx(); test_intconversions(); - test_PropVariantChangeType_LPWSTR(); + test_PropVariantChangeType(); test_PropVariantToBoolean(); test_PropVariantToStringWithDefault(); test_PropVariantToDouble();
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propvar.c | 26 ++++++++++++++++++++++++++ dlls/propsys/tests/propsys.c | 9 ++++++++- 2 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index d681b910e90..e0e05783ba1 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -401,6 +401,28 @@ HRESULT WINAPI PropVariantToString(REFPROPVARIANT propvarIn, PWSTR ret, UINT cch return hr; }
+static HRESULT string_alloc_from_uint(ULONG64 value, WCHAR **ret) +{ + WCHAR buffer[64], *out = buffer + ARRAY_SIZE(buffer) - 1; + + *out-- = 0; + + do + { + unsigned int next_digit = value % 10; + *out-- = '0' + next_digit; + value = value / 10; + } while (value); + + out++; + + if (!(*ret = CoTaskMemAlloc((wcslen(out) + 1) * sizeof(*out)))) + return E_OUTOFMEMORY; + wcscpy(*ret, out); + + return S_OK; +} + HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret) { WCHAR *res = NULL; @@ -450,6 +472,10 @@ HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret) } break;
+ case VT_UI2: + hr = string_alloc_from_uint(propvarIn->uiVal, &res); + break; + default: FIXME("Unsupported conversion (%d)\n", propvarIn->vt); hr = E_FAIL; diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index b266813cc91..24d06a95cb7 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -670,6 +670,13 @@ static void test_PropVariantToStringAlloc(void) ok(hres == S_OK, "PropVariantToStringAlloc returned %#lx.\n", hres); ok(!wcscmp(str, dummy_guid_str), "Unexpected str %s.\n", debugstr_w(str)); CoTaskMemFree(str); + + prop.vt = VT_UI2; + prop.uiVal = 123; + hres = PropVariantToStringAlloc(&prop, &str); + ok(hres == S_OK, "PropVariantToStringAlloc returned %#lx.\n", hres); + ok(!wcscmp(str, L"123"), "Unexpected str %s.\n", debugstr_w(str)); + CoTaskMemFree(str); }
static void test_PropVariantCompareEx(void) @@ -1764,13 +1771,13 @@ static void test_PropVariantToBSTR(void) check_PropVariantToBSTR(VT_I4, lVal, -789, L"-789"); check_PropVariantToBSTR(VT_I8, hVal.QuadPart, -101112, L"-101112"); check_PropVariantToBSTR(VT_UI1, bVal, 0xcd, L"205"); - check_PropVariantToBSTR(VT_UI2, uiVal, 0xdead, L"57005"); check_PropVariantToBSTR(VT_UI4, ulVal, 0xdeadbeef, L"3735928559"); check_PropVariantToBSTR(VT_UI8, uhVal.QuadPart, 0xdeadbeefdeadbeef, L"16045690984833335023"); check_PropVariantToBSTR(VT_BOOL, boolVal, TRUE, L"1"); check_PropVariantToBSTR(VT_R4, fltVal, 0.125f, L"0.125"); check_PropVariantToBSTR(VT_R8, dblVal, 0.456, L"0.456"); } + check_PropVariantToBSTR(VT_UI2, uiVal, 57005, L"57005"); check_PropVariantToBSTR(VT_CLSID, puuid, (CLSID *)&dummy_guid, dummy_guid_str); check_PropVariantToBSTR(VT_LPSTR, pszVal, (char *)topic, topicW); check_PropVariantToBSTR(VT_LPWSTR, pwszVal, (WCHAR *)topicW, topicW);
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propvar.c | 22 ++++++++++++++++++++-- dlls/propsys/tests/propsys.c | 6 +++--- 2 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index e0e05783ba1..928c46d4978 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -401,9 +401,23 @@ HRESULT WINAPI PropVariantToString(REFPROPVARIANT propvarIn, PWSTR ret, UINT cch return hr; }
-static HRESULT string_alloc_from_uint(ULONG64 value, WCHAR **ret) +static HRESULT string_alloc_from_int(const PROPVARIANT *var, WCHAR **ret) { WCHAR buffer[64], *out = buffer + ARRAY_SIZE(buffer) - 1; + BOOL negative = FALSE; + ULONG64 value; + + switch (var->vt) + { + case VT_I4: + value = (negative = var->lVal < 0) ? -var->lVal : var->lVal; + break; + case VT_UI2: + value = var->uiVal; + break; + default: + return E_UNEXPECTED; + }
*out-- = 0;
@@ -416,6 +430,9 @@ static HRESULT string_alloc_from_uint(ULONG64 value, WCHAR **ret)
out++;
+ if (negative) + *--out = '-'; + if (!(*ret = CoTaskMemAlloc((wcslen(out) + 1) * sizeof(*out)))) return E_OUTOFMEMORY; wcscpy(*ret, out); @@ -472,8 +489,9 @@ HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret) } break;
+ case VT_I4: case VT_UI2: - hr = string_alloc_from_uint(propvarIn->uiVal, &res); + hr = string_alloc_from_int(propvarIn, &res); break;
default: diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index 24d06a95cb7..b6252f53138 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1664,8 +1664,8 @@ static void test_PropVariantToString(void) propvar.vt = VT_I4; propvar.lVal = 22; hr = PropVariantToString(&propvar, bufferW, ARRAY_SIZE(bufferW)); - todo_wine ok(hr == S_OK, "PropVariantToString failed: 0x%08lx.\n", hr); - todo_wine ok(!lstrcmpW(bufferW, L"22"), "got wrong string: "%s".\n", wine_dbgstr_w(bufferW)); + ok(hr == S_OK, "PropVariantToString failed: 0x%08lx.\n", hr); + ok(!lstrcmpW(bufferW, L"22"), "got wrong string: "%s".\n", wine_dbgstr_w(bufferW)); memset(bufferW, 0, sizeof(bufferW)); PropVariantClear(&propvar);
@@ -1768,7 +1768,6 @@ static void test_PropVariantToBSTR(void) { check_PropVariantToBSTR(VT_I1, cVal, -123, L"-123"); check_PropVariantToBSTR(VT_I2, iVal, -456, L"-456"); - check_PropVariantToBSTR(VT_I4, lVal, -789, L"-789"); check_PropVariantToBSTR(VT_I8, hVal.QuadPart, -101112, L"-101112"); check_PropVariantToBSTR(VT_UI1, bVal, 0xcd, L"205"); check_PropVariantToBSTR(VT_UI4, ulVal, 0xdeadbeef, L"3735928559"); @@ -1777,6 +1776,7 @@ static void test_PropVariantToBSTR(void) check_PropVariantToBSTR(VT_R4, fltVal, 0.125f, L"0.125"); check_PropVariantToBSTR(VT_R8, dblVal, 0.456, L"0.456"); } + check_PropVariantToBSTR(VT_I4, lVal, -789, L"-789"); check_PropVariantToBSTR(VT_UI2, uiVal, 57005, L"57005"); check_PropVariantToBSTR(VT_CLSID, puuid, (CLSID *)&dummy_guid, dummy_guid_str); check_PropVariantToBSTR(VT_LPSTR, pszVal, (char *)topic, topicW);
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propvar.c | 4 ++++ dlls/propsys/tests/propsys.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index 928c46d4978..c36999e6424 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -409,6 +409,9 @@ static HRESULT string_alloc_from_int(const PROPVARIANT *var, WCHAR **ret)
switch (var->vt) { + case VT_I2: + value = (negative = var->iVal < 0) ? -var->iVal : var->iVal; + break; case VT_I4: value = (negative = var->lVal < 0) ? -var->lVal : var->lVal; break; @@ -489,6 +492,7 @@ HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret) } break;
+ case VT_I2: case VT_I4: case VT_UI2: hr = string_alloc_from_int(propvarIn, &res); diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index b6252f53138..dc2302784ae 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -806,7 +806,7 @@ static void test_PropVariantCompareEx(void) ok(res == 0, "res=%i\n", res);
res = PropVariantCompareEx(&str_2, &i2_2, 0, 0); - todo_wine ok(res == 0, "res=%i\n", res); + ok(res == 0, "res=%i\n", res);
res = PropVariantCompareEx(&str_02, &i2_2, 0, 0); ok(res == -1, "res=%i\n", res); @@ -1767,7 +1767,6 @@ static void test_PropVariantToBSTR(void) todo_wine { check_PropVariantToBSTR(VT_I1, cVal, -123, L"-123"); - check_PropVariantToBSTR(VT_I2, iVal, -456, L"-456"); check_PropVariantToBSTR(VT_I8, hVal.QuadPart, -101112, L"-101112"); check_PropVariantToBSTR(VT_UI1, bVal, 0xcd, L"205"); check_PropVariantToBSTR(VT_UI4, ulVal, 0xdeadbeef, L"3735928559"); @@ -1776,6 +1775,7 @@ static void test_PropVariantToBSTR(void) check_PropVariantToBSTR(VT_R4, fltVal, 0.125f, L"0.125"); check_PropVariantToBSTR(VT_R8, dblVal, 0.456, L"0.456"); } + check_PropVariantToBSTR(VT_I2, iVal, -456, L"-456"); check_PropVariantToBSTR(VT_I4, lVal, -789, L"-789"); check_PropVariantToBSTR(VT_UI2, uiVal, 57005, L"57005"); check_PropVariantToBSTR(VT_CLSID, puuid, (CLSID *)&dummy_guid, dummy_guid_str);
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propvar.c | 4 ++++ dlls/propsys/tests/propsys.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index c36999e6424..8ab9b0b7a92 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -409,6 +409,9 @@ static HRESULT string_alloc_from_int(const PROPVARIANT *var, WCHAR **ret)
switch (var->vt) { + case VT_I1: + value = (negative = var->cVal < 0) ? -var->cVal : var->cVal; + break; case VT_I2: value = (negative = var->iVal < 0) ? -var->iVal : var->iVal; break; @@ -492,6 +495,7 @@ HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret) } break;
+ case VT_I1: case VT_I2: case VT_I4: case VT_UI2: diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index dc2302784ae..6fce3cd51d5 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1766,7 +1766,6 @@ static void test_PropVariantToBSTR(void)
todo_wine { - check_PropVariantToBSTR(VT_I1, cVal, -123, L"-123"); check_PropVariantToBSTR(VT_I8, hVal.QuadPart, -101112, L"-101112"); check_PropVariantToBSTR(VT_UI1, bVal, 0xcd, L"205"); check_PropVariantToBSTR(VT_UI4, ulVal, 0xdeadbeef, L"3735928559"); @@ -1775,6 +1774,7 @@ static void test_PropVariantToBSTR(void) check_PropVariantToBSTR(VT_R4, fltVal, 0.125f, L"0.125"); check_PropVariantToBSTR(VT_R8, dblVal, 0.456, L"0.456"); } + check_PropVariantToBSTR(VT_I1, cVal, -123, L"-123"); check_PropVariantToBSTR(VT_I2, iVal, -456, L"-456"); check_PropVariantToBSTR(VT_I4, lVal, -789, L"-789"); check_PropVariantToBSTR(VT_UI2, uiVal, 57005, L"57005");
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propvar.c | 4 ++++ dlls/propsys/tests/propsys.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index 8ab9b0b7a92..ba6a2eca865 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -418,6 +418,9 @@ static HRESULT string_alloc_from_int(const PROPVARIANT *var, WCHAR **ret) case VT_I4: value = (negative = var->lVal < 0) ? -var->lVal : var->lVal; break; + case VT_UI1: + value = var->bVal; + break; case VT_UI2: value = var->uiVal; break; @@ -498,6 +501,7 @@ HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret) case VT_I1: case VT_I2: case VT_I4: + case VT_UI1: case VT_UI2: hr = string_alloc_from_int(propvarIn, &res); break; diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index 6fce3cd51d5..5cc93d05c56 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1767,7 +1767,6 @@ static void test_PropVariantToBSTR(void) todo_wine { check_PropVariantToBSTR(VT_I8, hVal.QuadPart, -101112, L"-101112"); - check_PropVariantToBSTR(VT_UI1, bVal, 0xcd, L"205"); check_PropVariantToBSTR(VT_UI4, ulVal, 0xdeadbeef, L"3735928559"); check_PropVariantToBSTR(VT_UI8, uhVal.QuadPart, 0xdeadbeefdeadbeef, L"16045690984833335023"); check_PropVariantToBSTR(VT_BOOL, boolVal, TRUE, L"1"); @@ -1777,6 +1776,7 @@ static void test_PropVariantToBSTR(void) check_PropVariantToBSTR(VT_I1, cVal, -123, L"-123"); check_PropVariantToBSTR(VT_I2, iVal, -456, L"-456"); check_PropVariantToBSTR(VT_I4, lVal, -789, L"-789"); + check_PropVariantToBSTR(VT_UI1, bVal, 205, L"205"); check_PropVariantToBSTR(VT_UI2, uiVal, 57005, L"57005"); check_PropVariantToBSTR(VT_CLSID, puuid, (CLSID *)&dummy_guid, dummy_guid_str); check_PropVariantToBSTR(VT_LPSTR, pszVal, (char *)topic, topicW);
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propvar.c | 4 ++++ dlls/propsys/tests/propsys.c | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index ba6a2eca865..aa71a26feaa 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -424,6 +424,9 @@ static HRESULT string_alloc_from_int(const PROPVARIANT *var, WCHAR **ret) case VT_UI2: value = var->uiVal; break; + case VT_UI4: + value = var->ulVal; + break; default: return E_UNEXPECTED; } @@ -503,6 +506,7 @@ HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret) case VT_I4: case VT_UI1: case VT_UI2: + case VT_UI4: hr = string_alloc_from_int(propvarIn, &res); break;
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index 5cc93d05c56..31218a42583 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1690,9 +1690,7 @@ static void test_PropVariantToString(void) propvar.vt = VT_UI4; propvar.lVal = 123456; hr = PropVariantToString(&propvar, bufferW, 4); - todo_wine ok(hr == STRSAFE_E_INSUFFICIENT_BUFFER, "PropVariantToString returned: %#lx.\n", hr); - todo_wine ok(!wcscmp(bufferW, L"123"), "Unexpected string %s.\n", debugstr_w(bufferW)); memset(bufferW, 0, sizeof(bufferW));
@@ -1767,7 +1765,6 @@ static void test_PropVariantToBSTR(void) todo_wine { check_PropVariantToBSTR(VT_I8, hVal.QuadPart, -101112, L"-101112"); - check_PropVariantToBSTR(VT_UI4, ulVal, 0xdeadbeef, L"3735928559"); check_PropVariantToBSTR(VT_UI8, uhVal.QuadPart, 0xdeadbeefdeadbeef, L"16045690984833335023"); check_PropVariantToBSTR(VT_BOOL, boolVal, TRUE, L"1"); check_PropVariantToBSTR(VT_R4, fltVal, 0.125f, L"0.125"); @@ -1778,6 +1775,7 @@ static void test_PropVariantToBSTR(void) check_PropVariantToBSTR(VT_I4, lVal, -789, L"-789"); check_PropVariantToBSTR(VT_UI1, bVal, 205, L"205"); check_PropVariantToBSTR(VT_UI2, uiVal, 57005, L"57005"); + check_PropVariantToBSTR(VT_UI4, ulVal, 0xdeadbeef, L"3735928559"); check_PropVariantToBSTR(VT_CLSID, puuid, (CLSID *)&dummy_guid, dummy_guid_str); check_PropVariantToBSTR(VT_LPSTR, pszVal, (char *)topic, topicW); check_PropVariantToBSTR(VT_LPWSTR, pwszVal, (WCHAR *)topicW, topicW);
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propvar.c | 4 ++++ dlls/propsys/tests/propsys.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index aa71a26feaa..42629d029c4 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -418,6 +418,9 @@ static HRESULT string_alloc_from_int(const PROPVARIANT *var, WCHAR **ret) case VT_I4: value = (negative = var->lVal < 0) ? -var->lVal : var->lVal; break; + case VT_I8: + value = (negative = var->hVal.QuadPart < 0) ? -var->hVal.QuadPart : var->hVal.QuadPart; + break; case VT_UI1: value = var->bVal; break; @@ -504,6 +507,7 @@ HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret) case VT_I1: case VT_I2: case VT_I4: + case VT_I8: case VT_UI1: case VT_UI2: case VT_UI4: diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index 31218a42583..7b5581c8062 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1764,7 +1764,6 @@ static void test_PropVariantToBSTR(void)
todo_wine { - check_PropVariantToBSTR(VT_I8, hVal.QuadPart, -101112, L"-101112"); check_PropVariantToBSTR(VT_UI8, uhVal.QuadPart, 0xdeadbeefdeadbeef, L"16045690984833335023"); check_PropVariantToBSTR(VT_BOOL, boolVal, TRUE, L"1"); check_PropVariantToBSTR(VT_R4, fltVal, 0.125f, L"0.125"); @@ -1773,6 +1772,7 @@ static void test_PropVariantToBSTR(void) check_PropVariantToBSTR(VT_I1, cVal, -123, L"-123"); check_PropVariantToBSTR(VT_I2, iVal, -456, L"-456"); check_PropVariantToBSTR(VT_I4, lVal, -789, L"-789"); + check_PropVariantToBSTR(VT_I8, hVal.QuadPart, -101112, L"-101112"); check_PropVariantToBSTR(VT_UI1, bVal, 205, L"205"); check_PropVariantToBSTR(VT_UI2, uiVal, 57005, L"57005"); check_PropVariantToBSTR(VT_UI4, ulVal, 0xdeadbeef, L"3735928559");
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propvar.c | 4 ++++ dlls/propsys/tests/propsys.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index 42629d029c4..7572c33821d 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -430,6 +430,9 @@ static HRESULT string_alloc_from_int(const PROPVARIANT *var, WCHAR **ret) case VT_UI4: value = var->ulVal; break; + case VT_UI8: + value = var->uhVal.QuadPart; + break; default: return E_UNEXPECTED; } @@ -511,6 +514,7 @@ HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret) case VT_UI1: case VT_UI2: case VT_UI4: + case VT_UI8: hr = string_alloc_from_int(propvarIn, &res); break;
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index 7b5581c8062..273c99524ea 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1764,7 +1764,6 @@ static void test_PropVariantToBSTR(void)
todo_wine { - check_PropVariantToBSTR(VT_UI8, uhVal.QuadPart, 0xdeadbeefdeadbeef, L"16045690984833335023"); check_PropVariantToBSTR(VT_BOOL, boolVal, TRUE, L"1"); check_PropVariantToBSTR(VT_R4, fltVal, 0.125f, L"0.125"); check_PropVariantToBSTR(VT_R8, dblVal, 0.456, L"0.456"); @@ -1776,6 +1775,7 @@ static void test_PropVariantToBSTR(void) check_PropVariantToBSTR(VT_UI1, bVal, 205, L"205"); check_PropVariantToBSTR(VT_UI2, uiVal, 57005, L"57005"); check_PropVariantToBSTR(VT_UI4, ulVal, 0xdeadbeef, L"3735928559"); + check_PropVariantToBSTR(VT_UI8, uhVal.QuadPart, 0xdeadbeefdeadbeef, L"16045690984833335023"); check_PropVariantToBSTR(VT_CLSID, puuid, (CLSID *)&dummy_guid, dummy_guid_str); check_PropVariantToBSTR(VT_LPSTR, pszVal, (char *)topic, topicW); check_PropVariantToBSTR(VT_LPWSTR, pwszVal, (WCHAR *)topicW, topicW);
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=150960
Your paranoid android.
=== debian11b (64 bit WoW report) ===
Report validation errors: d3d11:d3d11 has no test summary line (early exit of the main process?) d3d11:d3d11 has unaccounted for todo messages d3d11:d3d11 returned a non-zero exit code despite reporting no failures
On Tue Jan 21 23:39:52 2025 +0000, Nikolay Sivov wrote:
changed this line in [version 2 of the diff](/wine/wine/-/merge_requests/7163/diffs?diff_id=153346&start_sha=d733a005e04ebd2d4518b1853f81e7e825e7d18f#502c1a7c87092e83e31840da5c1118008582c272_414_446)
Thanks.