aboutsummaryrefslogtreecommitdiff
path: root/sys/cmd/rc/sys.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/cmd/rc/sys.c')
-rw-r--r--sys/cmd/rc/sys.c43
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;
+}