From 55be713d76bef86ba7577c810a9dbdfb071fc179 Mon Sep 17 00:00:00 2001 From: Carlos Rafael Ramirez Date: Mon, 31 Oct 2016 18:57:33 -0500 Subject: [PATCH] cmd: When 'if' condition is not met, ignore the next commands in the list. Signed-off-by: Carlos Rafael Ramirez Signed-off-by: Alexandre Julliard --- programs/cmd/builtins.c | 3 +++ programs/cmd/tests/test_builtins.cmd | 11 +++++++++++ programs/cmd/tests/test_builtins.cmd.exp | 13 +++++++++++++ 3 files changed, 27 insertions(+) diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index 49c366ad643..a29a5025090 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -1574,6 +1574,9 @@ static void WCMD_part_execute(CMD_LIST **cmdList, const WCHAR *firstcmd, } } if (curPosition == *cmdList) *cmdList = (*cmdList)->nextcommand; + } else if (!processThese) { + if (curPosition == *cmdList) *cmdList = (*cmdList)->nextcommand; + WINE_TRACE("Ignore the next command as well (next = %p)\n", *cmdList); } else { WINE_TRACE("Found end of this IF statement (next = %p)\n", *cmdList); break; diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd index eac5dca6f53..38a770066c0 100644 --- a/programs/cmd/tests/test_builtins.cmd +++ b/programs/cmd/tests/test_builtins.cmd @@ -836,6 +836,17 @@ if 1 GEQ "10" (echo 1 GEQ "10") else echo foo if "1" GEQ "10" (echo 1 GEQ "10") else echo foo if '1' GEQ "10" (echo '1' GEQ "10") else echo foo if "10" GEQ "10" (echo "10" GEQ "10") +echo --- unconditional ampersand after if one line +if "0"=="0" echo 1 & echo 2 & echo 3 else echo 4 +echo --- +echo x & if "0"=="1" echo 1 & echo 2 +echo --- +echo x & if "0"=="1" echo 1 & echo 2 & echo 3 +echo --- +echo x & if "0"=="1" (echo 1 & echo 2 & echo 3) +echo --- +echo x & if "0"=="1" echo 1 & echo 2 & echo 3 else echo 4 +echo --- goto :endIfCompOpsSubroutines rem IF subroutines helpers diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index 67e75e0eee6..d01a23ed47c 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -645,6 +645,19 @@ foo foo '1' GEQ "10" "10" GEQ "10" +--- unconditional ampersand after if one line +1@space@ +2@space@ +3 else echo 4 +--- +x@space@ +--- +x@space@ +--- +x@space@ +--- +x@space@ +--- ------------ Testing for ------------ --- plain FOR A