summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2018-09-08 14:50:41 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2018-09-08 14:50:41 +0200
commit96210d79b29eb31c6958c7aada57f39dc7f6cdcf (patch)
tree3a40ac1c61aa1033af03a02415745750cf890cea /sys
parent178bc8548acd64bc49f57c6b62de2daeb26cf046 (diff)
parent2839760066e578e449ebc8b3d71297b9f79a8c99 (diff)
merge
Diffstat (limited to 'sys')
-rw-r--r--sys/src/cmd/rc/exec.c15
-rw-r--r--sys/src/cmd/rc/fns.h1
-rw-r--r--sys/src/cmd/rc/havefork.c3
3 files changed, 18 insertions, 1 deletions
diff --git a/sys/src/cmd/rc/exec.c b/sys/src/cmd/rc/exec.c
index 10cb76935..4400e45bc 100644
--- a/sys/src/cmd/rc/exec.c
+++ b/sys/src/cmd/rc/exec.c
@@ -123,6 +123,21 @@ pushredir(int type, int from, int to)
runq->redir = rp;
}
+void
+shuffleredir(void)
+{
+ redir **rr, *rp;
+
+ rp = runq->redir;
+ if(rp==0)
+ return;
+ runq->redir = rp->next;
+ rp->next = runq->startredir;
+ for(rr = &runq->redir; *rr != rp->next; rr = &((*rr)->next))
+ ;
+ *rr = rp;
+}
+
var*
newvar(char *name, var *next)
{
diff --git a/sys/src/cmd/rc/fns.h b/sys/src/cmd/rc/fns.h
index 1afe9ce38..e06265f65 100644
--- a/sys/src/cmd/rc/fns.h
+++ b/sys/src/cmd/rc/fns.h
@@ -55,6 +55,7 @@ void readhere(void);
word* searchpath(char*);
void setstatus(char*);
void setvar(char*, word*);
+void shuffleredir(void);
void skipnl(void);
void start(code*, int, var*);
int truestatus(void);
diff --git a/sys/src/cmd/rc/havefork.c b/sys/src/cmd/rc/havefork.c
index ad5a80298..86d6c91f6 100644
--- a/sys/src/cmd/rc/havefork.c
+++ b/sys/src/cmd/rc/havefork.c
@@ -185,7 +185,8 @@ Xpipefd(void)
default:
addwaitpid(pid);
close(sidefd);
- pushredir(ROPEN, mainfd, mainfd); /* isn't this a noop? */
+ pushredir(ROPEN, mainfd, mainfd);
+ shuffleredir(); /* shuffle redir to bottom of stack for turfredir() */
strcpy(name, Fdprefix);
inttoascii(name+strlen(name), mainfd);
pushword(name);