From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propvar.c | 17 ++++++++++++++--- dlls/propsys/tests/propsys.c | 5 ----- 2 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index 5d776ed8dcf..7dff5045f2d 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -180,13 +180,24 @@ static HRESULT PROPVAR_ConvertNumber(REFPROPVARIANT pv, int dest_bits,
HRESULT WINAPI PropVariantToDouble(REFPROPVARIANT propvarIn, double *ret) { + HRESULT hr = S_OK; LONGLONG res; - HRESULT hr;
TRACE("(%p, %p)\n", propvarIn, ret);
- hr = PROPVAR_ConvertNumber(propvarIn, 64, TRUE, &res); - if (SUCCEEDED(hr)) *ret = (double)res; + switch (propvarIn->vt) + { + case VT_R8: + *ret = propvarIn->dblVal; + break; + case VT_R4: + *ret = propvarIn->fltVal; + break; + default: + hr = PROPVAR_ConvertNumber(propvarIn, 64, TRUE, &res); + if (SUCCEEDED(hr)) *ret = (double)res; + } + return hr; }
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index ef2d9f6b6b5..e05ea615d3b 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1690,7 +1690,6 @@ static void test_PropVariantToDouble(void) propvar.dblVal = 15.1; hr = PropVariantToDouble(&propvar, &value); ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); - todo_wine ok(value == 15.1, "Unexpected value: %f.\n", value);
PropVariantClear(&propvar); @@ -1739,18 +1738,14 @@ static void test_PropVariantToDouble(void) propvar.vt = VT_R4; propvar.fltVal = 8.1f; hr = PropVariantToDouble(&propvar, &value); - todo_wine ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); - todo_wine ok(value == 8.1f, "Unexpected value: %f.\n", value);
PropVariantClear(&propvar); propvar.vt = VT_R4; propvar.fltVal = 8.6f; hr = PropVariantToDouble(&propvar, &value); - todo_wine ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); - todo_wine ok(value == 8.6f, "Unexpected value: %f.\n", value); }