svn commit: r258535 - in head: bin/sh tools/regression/bin/sh/execution
Jilles Tjoelker
jilles at FreeBSD.org
Sun Nov 24 23:12:14 UTC 2013
Author: jilles
Date: Sun Nov 24 23:12:13 2013
New Revision: 258535
URL: http://svnweb.freebsd.org/changeset/base/258535
Log:
sh: Make <&0 disable the </dev/null implicit in a background command.
Although <&0 does nothing, it is a redirection affecting standard input and
should therefore disable the </dev/null redirection implicit in a background
command.
Added:
head/tools/regression/bin/sh/execution/bg10.0 (contents, props changed)
head/tools/regression/bin/sh/execution/bg10.0.stdout (contents, props changed)
Modified:
head/bin/sh/redir.c
Modified: head/bin/sh/redir.c
==============================================================================
--- head/bin/sh/redir.c Sun Nov 24 22:53:49 2013 (r258534)
+++ head/bin/sh/redir.c Sun Nov 24 23:12:13 2013 (r258535)
@@ -69,6 +69,7 @@ __FBSDID("$FreeBSD$");
struct redirtab {
struct redirtab *next;
int renamed[10];
+ int fd0_redirected;
};
@@ -109,11 +110,14 @@ redirect(union node *redir, int flags)
sv = ckmalloc(sizeof (struct redirtab));
for (i = 0 ; i < 10 ; i++)
sv->renamed[i] = EMPTY;
+ sv->fd0_redirected = fd0_redirected;
sv->next = redirlist;
redirlist = sv;
}
for (n = redir ; n ; n = n->nfile.next) {
fd = n->nfile.fd;
+ if (fd == 0)
+ fd0_redirected = 1;
if ((n->nfile.type == NTOFD || n->nfile.type == NFROMFD) &&
n->ndup.dupfd == fd)
continue; /* redirect from/to same file descriptor */
@@ -134,8 +138,6 @@ redirect(union node *redir, int flags)
sv->renamed[fd] = i;
INTON;
}
- if (fd == 0)
- fd0_redirected++;
openredirect(n, memory);
}
if (memory[1])
@@ -303,8 +305,6 @@ popredir(void)
for (i = 0 ; i < 10 ; i++) {
if (rp->renamed[i] != EMPTY) {
- if (i == 0)
- fd0_redirected--;
if (rp->renamed[i] >= 0) {
dup2(rp->renamed[i], i);
close(rp->renamed[i]);
@@ -314,6 +314,7 @@ popredir(void)
}
}
INTOFF;
+ fd0_redirected = rp->fd0_redirected;
redirlist = rp->next;
ckfree(rp);
INTON;
Added: head/tools/regression/bin/sh/execution/bg10.0
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/bin/sh/execution/bg10.0 Sun Nov 24 23:12:13 2013 (r258535)
@@ -0,0 +1,4 @@
+# $FreeBSD$
+# The redirection overrides the </dev/null implicit in a background command.
+
+echo yes | ${SH} -c '{ cat & wait; } <&0'
Added: head/tools/regression/bin/sh/execution/bg10.0.stdout
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/bin/sh/execution/bg10.0.stdout Sun Nov 24 23:12:13 2013 (r258535)
@@ -0,0 +1 @@
+yes
More information about the svn-src-all
mailing list