wine/dlls/msi tests/package.c cond.y
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Nov 14 05:24:14 CST 2005
ChangeSet ID: 21250
CVSROOT: /opt/cvs-commit
Module name: wine
Changes by: julliard at winehq.org 2005/11/14 05:24:14
Modified files:
dlls/msi/tests : package.c
dlls/msi : cond.y
Log message:
Mike McCormack <mike at codeweavers.com>
Fix comparison of empty properties to numbers and add test cases.
Patch: http://cvs.winehq.org/patch.py?id=21250
Old revision New revision Changes Path
1.10 1.11 +54 -0 wine/dlls/msi/tests/package.c
1.25 1.26 +28 -2 wine/dlls/msi/cond.y
Index: wine/dlls/msi/tests/package.c
diff -u -p wine/dlls/msi/tests/package.c:1.10 wine/dlls/msi/tests/package.c:1.11
--- wine/dlls/msi/tests/package.c:1.10 14 Nov 2005 11:24:14 -0000
+++ wine/dlls/msi/tests/package.c 14 Nov 2005 11:24:14 -0000
@@ -593,6 +593,60 @@ void test_condition(void)
r = MsiEvaluateCondition(hpkg, "Installed<>\"\"");
ok( r == MSICONDITION_FALSE, "wrong return val\n");
+ r = MsiEvaluateCondition(hpkg, "NOT 1 AND 0");
+ ok( r == MSICONDITION_FALSE, "wrong return val\n");
+
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_FALSE, "wrong return val\n");
+
+ MsiSetProperty(hpkg, "bandalmael", "0" );
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_TRUE, "wrong return val\n");
+
+ MsiSetProperty(hpkg, "bandalmael", "" );
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_FALSE, "wrong return val\n");
+
+ MsiSetProperty(hpkg, "bandalmael", "asdf" );
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_FALSE, "wrong return val\n");
+
+ MsiSetProperty(hpkg, "bandalmael", "0asdf" );
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_FALSE, "wrong return val\n");
+
+ MsiSetProperty(hpkg, "bandalmael", "0 " );
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_FALSE, "wrong return val\n");
+
+ MsiSetProperty(hpkg, "bandalmael", "-0" );
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_TRUE, "wrong return val\n");
+
+ MsiSetProperty(hpkg, "bandalmael", "0000000000000" );
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_TRUE, "wrong return val\n");
+
+ MsiSetProperty(hpkg, "bandalmael", "--0" );
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_FALSE, "wrong return val\n");
+
+ MsiSetProperty(hpkg, "bandalmael", "0x00" );
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_FALSE, "wrong return val\n");
+
+ MsiSetProperty(hpkg, "bandalmael", "-" );
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_FALSE, "wrong return val\n");
+
+ MsiSetProperty(hpkg, "bandalmael", "+0" );
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_FALSE, "wrong return val\n");
+
+ MsiSetProperty(hpkg, "bandalmael", "0.0" );
+ r = MsiEvaluateCondition(hpkg, "bandalmael=0");
+ ok( r == MSICONDITION_FALSE, "wrong return val\n");
+
MsiCloseHandle( hpkg );
}
Index: wine/dlls/msi/cond.y
diff -u -p wine/dlls/msi/cond.y:1.25 wine/dlls/msi/cond.y:1.26
--- wine/dlls/msi/cond.y:1.25 14 Nov 2005 11:24:14 -0000
+++ wine/dlls/msi/cond.y 14 Nov 2005 11:24:14 -0000
@@ -75,6 +75,30 @@ static INT compare_and_free_strings( LPW
return r;
}
+static BOOL num_from_prop( LPCWSTR p, INT *val )
+{
+ INT ret = 0, sign = 1;
+
+ if (!p)
+ return FALSE;
+ if (*p == '-')
+ {
+ sign = -1;
+ p++;
+ }
+ if (!*p)
+ return FALSE;
+ while (*p)
+ {
+ if( *p < '0' || *p > '9' )
+ return FALSE;
+ ret = ret*10 + (*p - '0');
+ p++;
+ }
+ *val = ret*sign;
+ return TRUE;
+}
+
%}
%pure-parser
@@ -169,11 +193,13 @@ boolean_factor:
}
| symbol_s operator value_i
{
- $$ = compare_int( $1 ? atoiW($1) : 0, $2, $3 );
+ int num;
+ $$ = num_from_prop( $1, &num ) && compare_int( num, $2, $3 );
}
| value_i operator symbol_s
{
- $$ = compare_int( $1, $2, $3 ? atoiW($3) : 0 );
+ int num;
+ $$ = num_from_prop( $3, &num ) && compare_int( $1, $2, num );
}
| symbol_s operator symbol_s
{
More information about the wine-cvs
mailing list