[1/7] propsys: Add support for VT_LPSTR and VT_LPWSTR to PropVariantCompareEx. (v3)
Dmitry Timoshkov
dmitry at baikal.ru
Wed Jun 21 22:38:46 CDT 2017
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
dlls/propsys/propvar.c | 38 ++++++++++++++++++++++++++++++++++++--
dlls/propsys/tests/propsys.c | 4 ++--
2 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c
index 8a8698fcbb..90e20e3c4d 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,25 @@ static HRESULT PROPVAR_ConvertNumber(REFPROPVARIANT pv, int dest_bits,
src_signed = FALSE;
*res = 0;
break;
+ case VT_LPSTR:
+ {
+ char *end;
+ *res = strtoll(pv->u.pszVal, &end, 0);
+ if (pv->u.pszVal == end)
+ return DISP_E_TYPEMISMATCH;
+ src_signed = *res < 0;
+ break;
+ }
+ case VT_LPWSTR:
+ case VT_BSTR:
+ {
+ WCHAR *end;
+ *res = strtolW(pv->u.pwszVal, &end, 0);
+ if (pv->u.pwszVal == end)
+ return DISP_E_TYPEMISMATCH;
+ src_signed = *res < 0;
+ break;
+ }
default:
FIXME("unhandled vt %d\n", pv->vt);
return E_NOTIMPL;
@@ -698,8 +721,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 71b6a93df1..54b45ace9b 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.13.1
More information about the wine-patches
mailing list