svn commit: r218325 - in head: bin/sh
tools/regression/bin/sh/execution
Jilles Tjoelker
jilles at FreeBSD.org
Sat Feb 5 15:02:19 UTC 2011
Author: jilles
Date: Sat Feb 5 15:02:19 2011
New Revision: 218325
URL: http://svn.freebsd.org/changeset/base/218325
Log:
sh: Fix two things about {(...)} <redir:
* In {(...) <redir1;} <redir2, do not drop redir1.
* Maintain the difference between (...) <redir and {(...)} <redir:
In (...) <redir, the redirection is performed in the child, while in
{(...)} <redir it should be performed in the parent (like {(...); :;}
<redir)
Added:
head/tools/regression/bin/sh/execution/redir5.0 (contents, props changed)
Modified:
head/bin/sh/parser.c
Modified: head/bin/sh/parser.c
==============================================================================
--- head/bin/sh/parser.c Sat Feb 5 14:08:51 2011 (r218324)
+++ head/bin/sh/parser.c Sat Feb 5 15:02:19 2011 (r218325)
@@ -389,8 +389,10 @@ command(void)
union node *cp, **cpp;
union node *redir, **rpp;
int t;
+ int is_subshell;
checkkwd = CHKNL | CHKKWD | CHKALIAS;
+ is_subshell = 0;
redir = NULL;
n1 = NULL;
rpp = &redir;
@@ -558,6 +560,7 @@ TRACE(("expecting DO got %s %s\n", tokna
if (readtoken() != TRP)
synexpect(TRP);
checkkwd = CHKKWD | CHKALIAS;
+ is_subshell = 1;
break;
case TBEGIN:
n1 = list(0, 0);
@@ -596,7 +599,7 @@ TRACE(("expecting DO got %s %s\n", tokna
tokpushback++;
*rpp = NULL;
if (redir) {
- if (n1->type != NSUBSHELL) {
+ if (!is_subshell) {
n2 = (union node *)stalloc(sizeof (struct nredir));
n2->type = NREDIR;
n2->nredir.n = n1;
Added: head/tools/regression/bin/sh/execution/redir5.0
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/bin/sh/execution/redir5.0 Sat Feb 5 15:02:19 2011 (r218325)
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+{ (echo bad) >/dev/null; } </dev/null
More information about the svn-src-all
mailing list