[5/5] cmd: Fix IF operands parsing for '==' operator
Frédéric Delanoy
frederic.delanoy at gmail.com
Tue Sep 6 12:19:44 CDT 2011
---
programs/cmd/builtins.c | 13 +++++++++++--
programs/cmd/tests/test_builtins.cmd.exp | 6 +++---
2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index c7814f9..cbb9f22 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -1508,9 +1508,18 @@ void WCMD_if (WCHAR *p, CMD_LIST **cmdList) {
WCMD_parameter(p, 2+negate, &command, NULL);
}
else if ((s = strstrW (p, eqeqW))) {
+ /* We need to get potential surrounding double quotes, so param1/2 can't be used */
+ WCHAR *leftPart, *leftPartEnd, *rightPart, *rightPartEnd;
s += 2;
- test = caseInsensitive ? (!lstrcmpiW(condition, WCMD_parameter(s, 0, NULL, NULL)))
- : (!lstrcmpW (condition, WCMD_parameter(s, 0, NULL, NULL)));
+ WCMD_parameter(p, 0+negate+caseInsensitive, &leftPart, &leftPartEnd);
+ WCMD_parameter(p, 1+negate+caseInsensitive, &rightPart, &rightPartEnd);
+ test = caseInsensitive
+ ? (CompareStringW(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE,
+ leftPart, leftPartEnd-leftPart+1,
+ rightPart, rightPartEnd-rightPart+1) == CSTR_EQUAL)
+ : (CompareStringW(LOCALE_SYSTEM_DEFAULT, 0,
+ leftPart, leftPartEnd-leftPart+1,
+ rightPart, rightPartEnd-rightPart+1) == CSTR_EQUAL);
WCMD_parameter(s, 1, &command, NULL);
}
else {
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
index 514a635..90dfb45 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -382,15 +382,15 @@ NUL
if/else should work with blocks
if seems to work
else seems to work
- at todo_wine@if seems not to detect /c as parameter
+if seems not to detect /c as parameter
Testing case sensitivity with and without /i option
if seems to default to case sensitivity
if /i seems to work
if /I seems to work
Testing string comparisons
equal
- at todo_wine@non equal
- at todo_wine@non equal
+non equal
+non equal
equal
Testing tabs handling
doom
--
1.7.6
More information about the wine-patches
mailing list