sys/t/mdup-test.c: Cope with the idea of arguments which aren't fd pairs.
[mLib] / sys / t / mdup-test.c
index d2a198a..ef9429d 100644 (file)
@@ -14,7 +14,7 @@ static void fail(const char *what) { perror(what); exit(1); }
 
 int main(int argc, char *argv[])
 {
-  int i, n;
+  int i, n, j;
   int fd, fd2;
   struct stat st;
   int ino[MAXFD];
@@ -22,18 +22,14 @@ int main(int argc, char *argv[])
   mdup_fd fds[MAXFD];
   int win = 1;
 
-  for (i = 0; i < argc - 1; i++) {
-    if (i >= MAXFD) {
-      fprintf(stderr, "too many\n");
-      exit(1);
-    }
-    if (sscanf(argv[i + 1], "%d:%d", &fds[i].cur, &fds[i].want) < 2 ||
-        fds[i].cur >= MAXFD) {
-      fprintf(stderr, "bad syntax\n");
-      exit(1);
-    }
+  for (i = 1, j = 0; i < argc; i++) {
+    if (j >= MAXFD) { fprintf(stderr, "too many\n"); exit(1); }
+    if (sscanf(argv[i], "%d:%d", &fds[j].cur, &fds[j].want) < 2 ||
+       fds[j].cur >= MAXFD)
+      { fprintf(stderr, "bad syntax\n"); exit(1); }
+    j++;
   }
-  n = argc - 1;
+  n = j;
   for (i = 0; i < MAXFD; i++) flag[i] = -1;
   for (i = 0; i < n; i++) {
     fd = fds[i].cur;
@@ -46,10 +42,7 @@ int main(int argc, char *argv[])
                      0700)) < 0)
        fail("creat");
       unlink(",delete-me");
-      if (fd2 != fd) {
-       if (dup2(fd2, fd) < 0) fail("dup2");
-       close(fd2);
-      }
+      if (fd2 != fd) { if (dup2(fd2, fd) < 0) fail("dup2"); close(fd2); }
       if (fstat(fd, &st)) fail("fstat");
       ino[i] = st.st_ino;
     }