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;
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to