From 2bf4f667fb41a8aba139e3ef93b1ebcd9f3e016d Mon Sep 17 00:00:00 2001 From: "Barton E. Schaefer" Date: Wed, 30 Sep 2015 20:01:13 -0700 Subject: [PATCH] 36707: distinguish ERR_RETURN value of retflag so that execif() can ignore it in the test sublist --- ChangeLog | 3 +++ Src/exec.c | 2 +- Src/loop.c | 8 ++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 018585611..3f54075f8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,9 @@ 2015-09-30 Barton E. Schaefer + * 36707: Src/exec.c, Src/loop.c: distinguish ERR_RETURN value + of retflag so that execif() can ignore it in the test sublist + * cf. 36690: Doc/Zsh/builtins.yo: remove sentence fragment 2015-09-30 Daniel Shahaf diff --git a/Src/exec.c b/Src/exec.c index da808d6f1..154bbb8db 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -1408,7 +1408,7 @@ sublist_done: exit(lastval); } if (errreturn) { - retflag = 1; + retflag = 2; breaks = loops; } } diff --git a/Src/loop.c b/Src/loop.c index 4def9b652..7d1528efe 100644 --- a/Src/loop.c +++ b/Src/loop.c @@ -552,8 +552,12 @@ execif(Estate state, int do_exec) run = 1; break; } - if (retflag) - break; + if (retflag) { + if (retflag == 2) + retflag = 0; /* Never ERR_RETURN here */ + else + break; + } s = 1; state->pc = next; }