[5/6] cmd: Add support for GEQ comparison operator in if statements (try 3) (resend)

Frédéric Delanoy frederic.delanoy at gmail.com
Sat Oct 22 07:52:17 CDT 2011


---
 programs/cmd/builtins.c                  |    9 +++++++++
 programs/cmd/tests/test_builtins.cmd     |   12 ++++++++++++
 programs/cmd/tests/test_builtins.cmd.exp |   25 +++++++++++++++++++++++++
 3 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 6c92604..dfeaa4a 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -1506,6 +1506,7 @@ static int evaluate_if_extended_operator(WCHAR *leftOperand, WCHAR *operator, WC
     static const WCHAR leqW[] = {'l','e','q','\0'};
     static const WCHAR equW[] = {'e','q','u','\0'};
     static const WCHAR neqW[] = {'n','e','q','\0'};
+    static const WCHAR geqW[] = {'g','e','q','\0'};
 
     /* Check if we have plain integers (in decimal, octal or hexadecimal notation) */
     leftOperand_int = strtolW(leftOperand, &endptr_leftOp, 0);
@@ -1545,6 +1546,14 @@ static int evaluate_if_extended_operator(WCHAR *leftOperand, WCHAR *operator, WC
                                : (lstrcmpW (leftOperand, rightOperand) != 0);
     }
 
+    if (!lstrcmpiW(operator, geqW)) {
+      if (int_operands)
+        return (leftOperand_int >= rightOperand_int);
+      else
+        return caseInsensitive ? (lstrcmpiW(leftOperand, rightOperand) >= 0)
+                               : (lstrcmpW (leftOperand, rightOperand) >= 0);
+    }
+
     return -1;
 }
 
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index 4815b03..04facb6 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -642,6 +642,11 @@ for %%i in (%STR_PARMS%) do call :NEQtest %%i B
 for %%i in (%STR_PARMS%) do call :NEQtest %%i AB
 for %%i in (%STR_PARMS%) do call :NEQtest %%i BA
 for %%i in (%STR_PARMS%) do call :NEQtest %%i AA
+for %%i in (%STR_PARMS%) do call :GEQtest %%i A
+for %%i in (%STR_PARMS%) do call :GEQtest %%i B
+for %%i in (%STR_PARMS%) do call :GEQtest %%i AB
+for %%i in (%STR_PARMS%) do call :GEQtest %%i BA
+for %%i in (%STR_PARMS%) do call :GEQtest %%i AA
 echo ...... for numbers ......
 if -1 LSS 1 (echo negative numbers handled)
 if not -1 LSS -10 (echo negative numbers handled)
@@ -671,6 +676,10 @@ for %%i in (%INT_PARMS%) do call :NEQtest %%i 0
 for %%i in (%INT_PARMS%) do call :NEQtest %%i 1
 for %%i in (%INT_PARMS%) do call :NEQtest %%i 10
 for %%i in (%INT_PARMS%) do call :NEQtest %%i 9
+for %%i in (%INT_PARMS%) do call :GEQtest %%i 0
+for %%i in (%INT_PARMS%) do call :GEQtest %%i 1
+for %%i in (%INT_PARMS%) do call :GEQtest %%i 10
+for %%i in (%INT_PARMS%) do call :GEQtest %%i 9
 goto :endIfCompOpsSubroutines
 
 rem IF subroutines helpers
@@ -686,6 +695,9 @@ goto :eof
 :NEQtest
 if %1 NEQ %2 echo %1 NEQ %2
 goto :eof
+:GEQtest
+if %1 GEQ %2 echo %1 GEQ %2
+goto :eof
 
 :endIfCompOpsSubroutines
 set STR_PARMS=
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
index ad5083f..5685d67 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -469,6 +469,21 @@ A NEQ AA
 B NEQ AA
 AB NEQ AA
 BA NEQ AA
+A GEQ A
+B GEQ A
+AB GEQ A
+BA GEQ A
+AA GEQ A
+B GEQ B
+BA GEQ B
+B GEQ AB
+AB GEQ AB
+BA GEQ AB
+BA GEQ BA
+B GEQ AA
+AB GEQ AA
+BA GEQ AA
+AA GEQ AA
 ...... for numbers ......
 negative numbers handled
 negative numbers handled
@@ -513,6 +528,16 @@ string/hexa compare ok
 0 NEQ 9
 1 NEQ 9
 10 NEQ 9
+0 GEQ 0
+1 GEQ 0
+10 GEQ 0
+9 GEQ 0
+1 GEQ 1
+10 GEQ 1
+9 GEQ 1
+10 GEQ 10
+10 GEQ 9
+9 GEQ 9
 -----------Testing for -----------
 ...plain FOR
 A
-- 
1.7.7




More information about the wine-patches mailing list