diff options
Diffstat (limited to 'sys/cmd/rc/sys.c')
-rw-r--r-- | sys/cmd/rc/sys.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/sys/cmd/rc/sys.c b/sys/cmd/rc/sys.c index d286c88..496c2e6 100644 --- a/sys/cmd/rc/sys.c +++ b/sys/cmd/rc/sys.c @@ -90,3 +90,46 @@ execute(Word *cmd, Word *path) efree(argv); fatal("could not execute command: %s\n", path->str); } + +void +redirect(Redir *r) +{ + if(r){ + redirect(r->link); + switch(r->type){ + case Ropen: + if(r->from != r->to){ + } + break; + case Rdup: + dup2(r->from, r->to); // TODO: error checking + break; + case Rclose: + close(r->from); + break; + default: + fatal("unrecognized redirection type %d\n", r->type); + } + } +} + +int +mapfd(int fd) +{ + Redir *r; + for(r = runner->redir.end; r; r = r->link){ + switch(r->type){ + case Rclose: + if(r->from == fd) + fd = -1; + break; + case Rdup: + case Ropen: + if(r->to == fd) + fd = r->from; + break; + } + } + + return fd; +} |