Added patches with multiple improvements for propsys functions.

This commit is contained in:
Sebastian Lackner 2017-05-16 00:22:58 +02:00
parent 5e70613512
commit d56994dbfa
7 changed files with 346 additions and 0 deletions

View File

@ -299,6 +299,7 @@ patch_enable_all ()
enable_oleaut32_x86_64_Marshaller="$1"
enable_opengl32_Revert_Disable_Ext="$1"
enable_opengl32_glDebugMessageCallback="$1"
enable_propsys_Improvements="$1"
enable_quartz_MediaSeeking_Positions="$1"
enable_quartz_Silence_FIXMEs="$1"
enable_riched20_Class_Tests="$1"
@ -1130,6 +1131,9 @@ patch_enable ()
opengl32-glDebugMessageCallback)
enable_opengl32_glDebugMessageCallback="$2"
;;
propsys-Improvements)
enable_propsys_Improvements="$2"
;;
quartz-MediaSeeking_Positions)
enable_quartz_MediaSeeking_Positions="$2"
;;
@ -6606,6 +6610,28 @@ if test "$enable_opengl32_glDebugMessageCallback" -eq 1; then
) >> "$patchlist"
fi
# Patchset propsys-Improvements
# |
# | Modified files:
# | * dlls/propsys/propvar.c, dlls/propsys/tests/propsys.c
# |
if test "$enable_propsys_Improvements" -eq 1; then
patch_apply propsys-Improvements/0001-propsys-Add-support-for-VT_I1-and-VT_UI1-to-PropVari.patch
patch_apply propsys-Improvements/0002-propsys-Add-support-for-VT_LPWSTR-and-VT_BSTR-to-Pro.patch
patch_apply propsys-Improvements/0003-propsys-Add-support-for-VT_BSTR-to-PropVariantChange.patch
patch_apply propsys-Improvements/0004-propsys-Make-VT_FILETIME-handling-by-PropVariantChan.patch
patch_apply propsys-Improvements/0005-propsys-Add-support-for-VT_LPSTR-to-PropVariantChang.patch
patch_apply propsys-Improvements/0006-propsys-Add-support-for-VT_LPSTR-and-VT_LPWSTR-to-Pr.patch
(
printf '%s\n' '+ { "Dmitry Timoshkov", "propsys: Add support for VT_I1 and VT_UI1 to PropVariantChangeType.", 1 },';
printf '%s\n' '+ { "Dmitry Timoshkov", "propsys: Add support for VT_LPWSTR and VT_BSTR to PropVariantToStringAlloc.", 1 },';
printf '%s\n' '+ { "Dmitry Timoshkov", "propsys: Add support for VT_BSTR to PropVariantChangeType.", 1 },';
printf '%s\n' '+ { "Dmitry Timoshkov", "propsys: Make VT_FILETIME handling by PropVariantChangeType more implicit.", 1 },';
printf '%s\n' '+ { "Dmitry Timoshkov", "propsys: Add support for VT_LPSTR to PropVariantChangeType.", 2 },';
printf '%s\n' '+ { "Dmitry Timoshkov", "propsys: Add support for VT_LPSTR and VT_LPWSTR to PropVariantCompareEx.", 2 },';
) >> "$patchlist"
fi
# Patchset quartz-MediaSeeking_Positions
# |
# | Modified files:

View File

@ -0,0 +1,49 @@
From ad76cf41e0a79a75c0acb3a8aae6caa6dab9549c Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 31 Mar 2017 13:39:41 +0800
Subject: propsys: Add support for VT_I1 and VT_UI1 to PropVariantChangeType.
---
dlls/propsys/propvar.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c
index 3fee67ad276..007fd94b840 100644
--- a/dlls/propsys/propvar.c
+++ b/dlls/propsys/propvar.c
@@ -264,6 +264,32 @@ HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT p
switch (vt)
{
+ case VT_I1:
+ {
+ LONGLONG res;
+
+ hr = PROPVAR_ConvertNumber(propvarSrc, 8, TRUE, &res);
+ if (SUCCEEDED(hr))
+ {
+ ppropvarDest->vt = VT_I1;
+ ppropvarDest->u.cVal = (char)res;
+ }
+ return hr;
+ }
+
+ case VT_UI1:
+ {
+ LONGLONG res;
+
+ hr = PROPVAR_ConvertNumber(propvarSrc, 8, FALSE, &res);
+ if (SUCCEEDED(hr))
+ {
+ ppropvarDest->vt = VT_UI1;
+ ppropvarDest->u.bVal = (UCHAR)res;
+ }
+ return hr;
+ }
+
case VT_I2:
{
SHORT res;
--
2.12.2

View File

@ -0,0 +1,44 @@
From 08d1f368bb9d12d89f334a7fd34f06895b217087 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 31 Mar 2017 13:43:52 +0800
Subject: propsys: Add support for VT_LPWSTR and VT_BSTR to
PropVariantToStringAlloc.
---
dlls/propsys/propvar.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c
index 007fd94b840..a359bc724fc 100644
--- a/dlls/propsys/propvar.c
+++ b/dlls/propsys/propvar.c
@@ -224,6 +224,7 @@ HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret)
res = CoTaskMemAlloc(1*sizeof(WCHAR));
res[0] = '\0';
break;
+
case VT_LPSTR:
if(propvarIn->u.pszVal)
{
@@ -237,6 +238,18 @@ HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret)
MultiByteToWideChar(CP_ACP, 0, propvarIn->u.pszVal, -1, res, len);
}
break;
+
+ case VT_LPWSTR:
+ case VT_BSTR:
+ if (propvarIn->u.pwszVal)
+ {
+ DWORD size = (strlenW(propvarIn->u.pwszVal) + 1) * sizeof(WCHAR);
+ res = CoTaskMemAlloc(size);
+ if(!res) return E_OUTOFMEMORY;
+ memcpy(res, propvarIn->u.pwszVal, size);
+ }
+ break;
+
default:
FIXME("Unsupported conversion (%d)\n", propvarIn->vt);
hr = E_FAIL;
--
2.12.2

View File

@ -0,0 +1,26 @@
From a862cb25cefe885d4de212c21fc8a62dc8b8c682 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 31 Mar 2017 13:45:23 +0800
Subject: propsys: Add support for VT_BSTR to PropVariantChangeType.
---
dlls/propsys/propvar.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c
index a359bc724fc..92399f56576 100644
--- a/dlls/propsys/propvar.c
+++ b/dlls/propsys/propvar.c
@@ -369,7 +369,9 @@ HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT p
}
return hr;
}
+
case VT_LPWSTR:
+ case VT_BSTR:
{
WCHAR *res;
hr = PropVariantToStringAlloc(propvarSrc, &res);
--
2.12.2

View File

@ -0,0 +1,67 @@
From 96f68fa277d1f8aed675d962f8cfa898b06805d7 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Sun, 7 May 2017 17:19:33 +0800
Subject: propsys: Make VT_FILETIME handling by PropVariantChangeType more
implicit.
---
dlls/propsys/propvar.c | 22 +++++++++-------------
1 file changed, 9 insertions(+), 13 deletions(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c
index 92399f56576..725428ebad2 100644
--- a/dlls/propsys/propvar.c
+++ b/dlls/propsys/propvar.c
@@ -36,12 +36,11 @@
WINE_DEFAULT_DEBUG_CHANNEL(propsys);
-static HRESULT PROPVAR_ConvertFILETIME(PROPVARIANT *ppropvarDest,
- REFPROPVARIANT propvarSrc, VARTYPE vt)
+static HRESULT PROPVAR_ConvertFILETIME(const FILETIME *ft, PROPVARIANT *ppropvarDest, VARTYPE vt)
{
SYSTEMTIME time;
- FileTimeToSystemTime(&propvarSrc->u.filetime, &time);
+ FileTimeToSystemTime(ft, &time);
switch (vt)
{
@@ -272,9 +271,12 @@ HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT p
FIXME("(%p, %p, %d, %d, %d): semi-stub!\n", ppropvarDest, propvarSrc,
propvarSrc->vt, flags, vt);
- if(vt == propvarSrc->vt)
+ if (vt == propvarSrc->vt)
return PropVariantCopy(ppropvarDest, propvarSrc);
+ if (propvarSrc->vt == VT_FILETIME)
+ return PROPVAR_ConvertFILETIME(&propvarSrc->u.filetime, ppropvarDest, vt);
+
switch (vt)
{
case VT_I1:
@@ -382,17 +384,11 @@ HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT p
}
return hr;
}
- }
- switch (propvarSrc->vt)
- {
- case VT_FILETIME:
- return PROPVAR_ConvertFILETIME(ppropvarDest, propvarSrc, vt);
- default:
- FIXME("Unhandled source type: %d\n", propvarSrc->vt);
+ default:
+ FIXME("Unhandled dest type: %d\n", vt);
+ return E_FAIL;
}
-
- return E_FAIL;
}
static void PROPVAR_GUIDToWSTR(REFGUID guid, WCHAR *str)
--
2.12.2

View File

@ -0,0 +1,48 @@
From e84408e24968a947de9fcfde7605e5f200d24a01 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Sun, 7 May 2017 17:25:53 +0800
Subject: propsys: Add support for VT_LPSTR to PropVariantChangeType. (v2)
---
dlls/propsys/propvar.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c
index 725428ebad2..8233d2f362f 100644
--- a/dlls/propsys/propvar.c
+++ b/dlls/propsys/propvar.c
@@ -385,6 +385,31 @@ HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT p
return hr;
}
+ case VT_LPSTR:
+ {
+ WCHAR *resW;
+ hr = PropVariantToStringAlloc(propvarSrc, &resW);
+ if (SUCCEEDED(hr))
+ {
+ char *res;
+ DWORD len;
+
+ len = WideCharToMultiByte(CP_ACP, 0, resW, -1, NULL, 0, NULL, NULL);
+ res = CoTaskMemAlloc(len);
+ if (res)
+ {
+ WideCharToMultiByte(CP_ACP, 0, resW, -1, res, len, NULL, NULL);
+ ppropvarDest->vt = VT_LPSTR;
+ ppropvarDest->u.pszVal = res;
+ }
+ else
+ hr = E_OUTOFMEMORY;
+
+ CoTaskMemFree(resW);
+ }
+ return hr;
+ }
+
default:
FIXME("Unhandled dest type: %d\n", vt);
return E_FAIL;
--
2.12.2

View File

@ -0,0 +1,86 @@
From 1908c1582fcd927a08c0aa7b0a6c1e11c614942f Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 31 Mar 2017 13:53:14 +0800
Subject: propsys: Add support for VT_LPSTR and VT_LPWSTR to
PropVariantCompareEx. (v2)
---
dlls/propsys/propvar.c | 28 ++++++++++++++++++++++++++--
dlls/propsys/tests/propsys.c | 4 ++--
2 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c
index 8233d2f362f..0c366d5a053 100644
--- a/dlls/propsys/propvar.c
+++ b/dlls/propsys/propvar.c
@@ -18,8 +18,12 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include "config.h"
+#include "wine/port.h"
+
#include <stdarg.h>
#include <stdio.h>
+#include <stdlib.h>
#define NONAMELESSUNION
@@ -112,6 +116,15 @@ static HRESULT PROPVAR_ConvertNumber(REFPROPVARIANT pv, int dest_bits,
src_signed = FALSE;
*res = 0;
break;
+ case VT_LPSTR:
+ *res = strtoll(pv->u.pszVal, NULL, 0);
+ src_signed = *res < 0;
+ break;
+ case VT_LPWSTR:
+ case VT_BSTR:
+ *res = strtolW(pv->u.pwszVal, NULL, 0);
+ src_signed = *res < 0;
+ break;
default:
FIXME("unhandled vt %d\n", pv->vt);
return E_NOTIMPL;
@@ -698,8 +711,19 @@ INT WINAPI PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2
CMP_INT_VALUE(uhVal.QuadPart);
break;
case VT_BSTR:
- /* FIXME: Use string flags. */
- res = lstrcmpW(propvar1->u.bstrVal, propvar2->u.bstrVal);
+ case VT_LPWSTR:
+ /* FIXME: Use other string flags. */
+ if (flags & (PVCF_USESTRCMPI | PVCF_USESTRCMPIC))
+ res = lstrcmpiW(propvar1->u.bstrVal, propvar2_converted->u.bstrVal);
+ else
+ res = lstrcmpW(propvar1->u.bstrVal, propvar2_converted->u.bstrVal);
+ break;
+ case VT_LPSTR:
+ /* FIXME: Use other string flags. */
+ if (flags & (PVCF_USESTRCMPI | PVCF_USESTRCMPIC))
+ res = lstrcmpiA(propvar1->u.pszVal, propvar2_converted->u.pszVal);
+ else
+ res = lstrcmpA(propvar1->u.pszVal, propvar2_converted->u.pszVal);
break;
default:
FIXME("vartype %d not handled\n", propvar1->vt);
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c
index 71b6a93df17..54b45ace9bd 100644
--- a/dlls/propsys/tests/propsys.c
+++ b/dlls/propsys/tests/propsys.c
@@ -735,10 +735,10 @@ static void test_PropVariantCompare(void)
ok(res == 0, "res=%i\n", res);
res = PropVariantCompareEx(&i2_2, &str_2, 0, 0);
- todo_wine ok(res == 0, "res=%i\n", res);
+ ok(res == 0, "res=%i\n", res);
res = PropVariantCompareEx(&i2_2, &str_02, 0, 0);
- todo_wine ok(res == 0, "res=%i\n", res);
+ ok(res == 0, "res=%i\n", res);
res = PropVariantCompareEx(&str_2, &i2_2, 0, 0);
todo_wine ok(res == 0, "res=%i\n", res);
--
2.12.2