diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index 3a8dfba0a84..e15c7c8b720 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -2358,6 +2358,7 @@ static int evaluate_if_comparison(const WCHAR *leftOperand, const WCHAR *operato static const WCHAR lssW[] = {'l','s','s','\0'}; static const WCHAR leqW[] = {'l','e','q','\0'}; static const WCHAR equW[] = {'e','q','u','\0'}; + static const WCHAR neqW[] = {'n','e','q','\0'}; /* == is a special case, as it always compares strings */ if (!lstrcmpiW(operator, eqeqW)) @@ -2394,6 +2395,14 @@ static int evaluate_if_comparison(const WCHAR *leftOperand, const WCHAR *operato : lstrcmpW (leftOperand, rightOperand) == 0; } + if (!lstrcmpiW(operator, neqW)) { + 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.exp b/programs/cmd/tests/test_builtins.cmd.exp index 009473ea207..9adc0168d12 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -487,26 +487,26 @@ AB EQU AB BA EQU BA AA EQU AA A EQU a insensitive -@todo_wine@B NEQ A -@todo_wine@AB NEQ A -@todo_wine@BA NEQ A -@todo_wine@AA NEQ A -@todo_wine@A NEQ B -@todo_wine@AB NEQ B -@todo_wine@BA NEQ B -@todo_wine@AA NEQ B -@todo_wine@A NEQ AB -@todo_wine@B NEQ AB -@todo_wine@BA NEQ AB -@todo_wine@AA NEQ AB -@todo_wine@A NEQ BA -@todo_wine@B NEQ BA -@todo_wine@AB NEQ BA -@todo_wine@AA NEQ BA -@todo_wine@A NEQ AA -@todo_wine@B NEQ AA -@todo_wine@AB NEQ AA -@todo_wine@BA NEQ AA +B NEQ A +AB NEQ A +BA NEQ A +AA NEQ A +A NEQ B +AB NEQ B +BA NEQ B +AA NEQ B +A NEQ AB +B NEQ AB +BA NEQ AB +AA NEQ AB +A NEQ BA +B NEQ BA +AB NEQ BA +AA NEQ BA +A NEQ AA +B NEQ AA +AB NEQ AA +BA NEQ AA @todo_wine@A GEQ A @todo_wine@B GEQ A @todo_wine@AB GEQ A @@ -564,18 +564,18 @@ octal ok hexa ok string/hexa compare ok string/hexa compare ok -@todo_wine@1 NEQ 0 -@todo_wine@10 NEQ 0 -@todo_wine@9 NEQ 0 -@todo_wine@0 NEQ 1 -@todo_wine@10 NEQ 1 -@todo_wine@9 NEQ 1 -@todo_wine@0 NEQ 10 -@todo_wine@1 NEQ 10 -@todo_wine@9 NEQ 10 -@todo_wine@0 NEQ 9 -@todo_wine@1 NEQ 9 -@todo_wine@10 NEQ 9 +1 NEQ 0 +10 NEQ 0 +9 NEQ 0 +0 NEQ 1 +10 NEQ 1 +9 NEQ 1 +0 NEQ 10 +1 NEQ 10 +9 NEQ 10 +0 NEQ 9 +1 NEQ 9 +10 NEQ 9 @todo_wine@0 GEQ 0 @todo_wine@1 GEQ 0 @todo_wine@10 GEQ 0