]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/cmd/tee.c
sshfs: usage
[plan9front.git] / sys / src / cmd / tee.c
index 83db8a08f399dada560e4a6136c023593f056a84..40a3171fae47d03c3a6c2a398b62a778452dbaf3 100644 (file)
@@ -5,9 +5,12 @@
 #include <u.h>
 #include <libc.h>
 
+enum {
+       FDSTART = 3,
+};
+
 int    uflag;
 int    aflag;
-int    openf[100];
 
 char in[8192];
 
@@ -42,26 +45,29 @@ main(int argc, char **argv)
        n = 0;
        while(*argv) {
                if(aflag) {
-                       openf[n] = open(argv[0], OWRITE);
-                       if(openf[n] < 0)
-                               openf[n] = create(argv[0], OWRITE, 0666);
-                       seek(openf[n], 0L, 2);
+                       i = open(argv[0], OWRITE);
+                       if(i < 0)
+                               i = create(argv[0], OWRITE, 0666);
+                       seek(i, 0L, 2);
                } else
-                       openf[n] = create(argv[0], OWRITE, 0666);
-               if(openf[n] < 0) {
+                       i = create(argv[0], OWRITE, 0666);
+               if(i < 0) {
                        fprint(2, "tee: cannot open %s: %r\n", argv[0]);
-               } else
+               } else {
+                       if(i != n+FDSTART)
+                               dup(i, n+FDSTART);
                        n++;
+               }
                argv++;
        }
-       openf[n++] = 1;
 
        for(;;) {
                r = read(0, in, sizeof in);
                if(r <= 0)
                        exits(nil);
                for(i=0; i<n; i++)
-                       write(openf[i], in, r);
+                       write(i+FDSTART, in, r);
+               write(1, in, r);
        }
 }