Author: jilles
Date: Mon Apr 25 20:54:12 2011
New Revision: 221027
URL: http://svn.freebsd.org/changeset/base/221027

Log:
  sh: Set $? to 0 for background commands.
  
  For backgrounded pipelines and subshells, the previous value of $? was being
  preserved, which is incorrect.
  
  For backgrounded simple commands containing a command substitution, the
  status of the last command substitution was returned instead of 0.
  
  If fork() fails, this is an error.

Added:
  head/tools/regression/bin/sh/execution/bg1.0   (contents, props changed)
  head/tools/regression/bin/sh/execution/bg2.0   (contents, props changed)
  head/tools/regression/bin/sh/execution/bg3.0   (contents, props changed)
Modified:
  head/bin/sh/eval.c

Modified: head/bin/sh/eval.c
==============================================================================
--- head/bin/sh/eval.c  Mon Apr 25 19:15:58 2011        (r221026)
+++ head/bin/sh/eval.c  Mon Apr 25 20:54:12 2011        (r221027)
@@ -420,7 +420,8 @@ evalsubshell(union node *n, int flags)
                INTOFF;
                exitstatus = waitforjob(jp, (int *)NULL);
                INTON;
-       }
+       } else
+               exitstatus = 0;
 }
 
 
@@ -559,7 +560,8 @@ evalpipe(union node *n)
                exitstatus = waitforjob(jp, (int *)NULL);
                TRACE(("evalpipe:  job done exit status %d\n", exitstatus));
                INTON;
-       }
+       } else
+               exitstatus = 0;
 }
 
 
@@ -1056,7 +1058,8 @@ parent:   /* parent process gets here (if 
                backcmd->fd = pip[0];
                close(pip[1]);
                backcmd->jp = jp;
-       }
+       } else
+               exitstatus = 0;
 
 out:
        if (lastarg)

Added: head/tools/regression/bin/sh/execution/bg1.0
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/tools/regression/bin/sh/execution/bg1.0        Mon Apr 25 20:54:12 
2011        (r221027)
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+: `false` &

Added: head/tools/regression/bin/sh/execution/bg2.0
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/tools/regression/bin/sh/execution/bg2.0        Mon Apr 25 20:54:12 
2011        (r221027)
@@ -0,0 +1,5 @@
+# $FreeBSD$
+
+f() { return 42; }
+f
+: | : &

Added: head/tools/regression/bin/sh/execution/bg3.0
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/tools/regression/bin/sh/execution/bg3.0        Mon Apr 25 20:54:12 
2011        (r221027)
@@ -0,0 +1,5 @@
+# $FreeBSD$
+
+f() { return 42; }
+f
+(:) &
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to