about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPaul Ackersviller <packersv@users.sourceforge.net>2007-12-10 03:16:53 +0000
committerPaul Ackersviller <packersv@users.sourceforge.net>2007-12-10 03:16:53 +0000
commit4736e253beca45aed88ef9a8d5225c7164208c45 (patch)
tree3c1d053a7b09cd5ccb99867c00ff04f73078517d
parent3ac2becb4fd14b1a63e6786492c823e0f4ccce35 (diff)
downloadzsh-4736e253beca45aed88ef9a8d5225c7164208c45.tar.gz
zsh-4736e253beca45aed88ef9a8d5225c7164208c45.tar.xz
zsh-4736e253beca45aed88ef9a8d5225c7164208c45.zip
Merge 24150: Exit status of null command should be exit status of last cmdsubst.
-rw-r--r--ChangeLog8
-rw-r--r--Src/exec.c2
-rw-r--r--Test/D08cmdsubst.ztst8
3 files changed, 17 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index e197f1e4a..e2d8aac60 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2007-12-09  Barton E. Schaefer  <schaefer@zsh.org>
+
+	* 24150 plus unposted: Src/exec.c, Test/D08cmdsubst.ztst:
+	Retain exit status of last non-assignment command substitution
+	across variable assignment processing so that, in the event of
+	no command word to execute, the exit status of the statement is
+	that of the last command substitution (per POSIX).
+
 2007-12-09  Peter Stephenson  <p.w.stephenson@ntlworld.com>
 
 	* 24197, Src/utils.c, Src/Modules/datetime.c: interface to
diff --git a/Src/exec.c b/Src/exec.c
index 76bd8638a..fc45653e9 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -1963,7 +1963,7 @@ execcmd(Estate state, int input, int output, int how, int last1)
 		    lastval = 0;
 		    return;
 		} else {
-		    cmdoutval = 0;
+		    cmdoutval = lastval;
 		    if (varspc)
 			addvars(state, varspc, 0);
 		    if (errflag)
diff --git a/Test/D08cmdsubst.ztst b/Test/D08cmdsubst.ztst
index 6cbcbf929..015796ed6 100644
--- a/Test/D08cmdsubst.ztst
+++ b/Test/D08cmdsubst.ztst
@@ -81,3 +81,11 @@
 >third: file1.txt file2.txt
 >fourth: *
 >fifth: file1.txt file2.txt
+
+  $(exit 0) $(exit 3) || print $?
+0:empty command uses exit value of last substitution
+>3
+
+  X=$(exit 2) $(exit 0) || print $?
+0:variable assignments processed after other substitutions
+>2