Aric Stewart : msi: Reorder the condition operators so that longer strings are matched first.

Alexandre Julliard julliard at winehq.org
Mon Mar 23 12:34:53 CDT 2009


Module: wine
Branch: master
Commit: 39600d9d2e3e5fb7cd34d913f1870d8d6f0362de
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=39600d9d2e3e5fb7cd34d913f1870d8d6f0362de

Author: Aric Stewart <aric at codeweavers.com>
Date:   Mon Mar 16 11:05:11 2009 -0500

msi: Reorder the condition operators so that longer strings are matched first.

This allows ~<< to be properly matched.

---

 dlls/msi/cond.y          |    4 ++--
 dlls/msi/tests/package.c |    9 +++++++++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/dlls/msi/cond.y b/dlls/msi/cond.y
index 7eb48c5..8831208 100644
--- a/dlls/msi/cond.y
+++ b/dlls/msi/cond.y
@@ -553,14 +553,14 @@ static int COND_GetOperator( COND_input *cond )
         const WCHAR str[4];
         int id;
     } table[] = {
-        { {'~','=',0},     COND_IEQ },
         { {'~','<','=',0}, COND_ILE },
         { {'~','>','<',0}, COND_ISS },
         { {'~','>','>',0}, COND_IRHS },
         { {'~','<','>',0}, COND_INE },
-        { {'~','<',0},     COND_ILT },
         { {'~','>','=',0}, COND_IGE },
         { {'~','<','<',0}, COND_ILHS },
+        { {'~','=',0},     COND_IEQ },
+        { {'~','<',0},     COND_ILT },
         { {'~','>',0},     COND_IGT },
         { {'>','=',0},     COND_GE  },
         { {'>','<',0},     COND_SS  },
diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c
index 3cb5d1d..2696dc2 100644
--- a/dlls/msi/tests/package.c
+++ b/dlls/msi/tests/package.c
@@ -1072,6 +1072,15 @@ static void test_condition(void)
     r = MsiEvaluateCondition(hpkg, "not LicView");
     ok( r == MSICONDITION_TRUE, "wrong return val\n");
 
+    r = MsiEvaluateCondition(hpkg, "\"Testing\" ~<< \"Testing\"");
+    ok (r == MSICONDITION_TRUE, "wrong return val\n");
+
+    r = MsiEvaluateCondition(hpkg, "LicView ~<< \"Testing\"");
+    ok (r == MSICONDITION_FALSE, "wrong return val\n");
+
+    r = MsiEvaluateCondition(hpkg, "Not LicView ~<< \"Testing\"");
+    ok (r == MSICONDITION_TRUE, "wrong return val\n");
+
     r = MsiEvaluateCondition(hpkg, "not \"A\"");
     ok( r == MSICONDITION_FALSE, "wrong return val\n");
 




More information about the wine-cvs mailing list