svn commit: r223282 - head/bin/sh

Jilles Tjoelker jilles at FreeBSD.org
Sat Jun 18 23:59:00 UTC 2011


Author: jilles
Date: Sat Jun 18 23:58:59 2011
New Revision: 223282
URL: http://svn.freebsd.org/changeset/base/223282

Log:
  sh: Remove special support for background simple commands.
  
  It expands the arguments in the parent shell process, which is incorrect.

Modified:
  head/bin/sh/eval.c
  head/bin/sh/nodetypes
  head/bin/sh/parser.c

Modified: head/bin/sh/eval.c
==============================================================================
--- head/bin/sh/eval.c	Sat Jun 18 23:43:28 2011	(r223281)
+++ head/bin/sh/eval.c	Sat Jun 18 23:58:59 2011	(r223282)
@@ -894,14 +894,13 @@ evalcommand(union node *cmd, int flags, 
 	}
 
 	/* Fork off a child process if necessary. */
-	if (cmd->ncmd.backgnd
-	 || ((cmdentry.cmdtype == CMDNORMAL || cmdentry.cmdtype == CMDUNKNOWN)
+	if (((cmdentry.cmdtype == CMDNORMAL || cmdentry.cmdtype == CMDUNKNOWN)
 	    && ((flags & EV_EXIT) == 0 || have_traps()))
 	 || ((flags & EV_BACKCMD) != 0
 	    && (cmdentry.cmdtype != CMDBUILTIN ||
 		 !safe_builtin(cmdentry.u.index, argc, argv)))) {
 		jp = makejob(cmd, 1);
-		mode = cmd->ncmd.backgnd;
+		mode = FORK_FG;
 		if (flags & EV_BACKCMD) {
 			mode = FORK_NOJOB;
 			if (pipe(pip) < 0)
@@ -1068,8 +1067,7 @@ parent:	/* parent process gets here (if 
 		backcmd->fd = pip[0];
 		close(pip[1]);
 		backcmd->jp = jp;
-	} else
-		exitstatus = 0;
+	}
 
 out:
 	if (lastarg)

Modified: head/bin/sh/nodetypes
==============================================================================
--- head/bin/sh/nodetypes	Sat Jun 18 23:43:28 2011	(r223281)
+++ head/bin/sh/nodetypes	Sat Jun 18 23:58:59 2011	(r223282)
@@ -56,7 +56,6 @@ NSEMI nbinary			# two commands separated
 
 NCMD ncmd			# a simple command
 	type	  int
-	backgnd	  int			# set to run command in background
 	args	  nodeptr		# the arguments
 	redirect  nodeptr		# list of file redirections
 

Modified: head/bin/sh/parser.c
==============================================================================
--- head/bin/sh/parser.c	Sat Jun 18 23:43:28 2011	(r223281)
+++ head/bin/sh/parser.c	Sat Jun 18 23:58:59 2011	(r223282)
@@ -240,8 +240,8 @@ list(int nlflag, int erflag)
 		n2 = andor();
 		tok = readtoken();
 		if (tok == TBACKGND) {
-			if (n2->type == NCMD || n2->type == NPIPE) {
-				n2->ncmd.backgnd = 1;
+			if (n2->type == NPIPE) {
+				n2->npipe.backgnd = 1;
 			} else if (n2->type == NREDIR) {
 				n2->type = NBACKGND;
 			} else {
@@ -689,7 +689,6 @@ simplecmd(union node **rpp, union node *
 	*rpp = NULL;
 	n = (union node *)stalloc(sizeof (struct ncmd));
 	n->type = NCMD;
-	n->ncmd.backgnd = 0;
 	n->ncmd.args = args;
 	n->ncmd.redirect = redir;
 	return n;


More information about the svn-src-all mailing list