chiark / gitweb /
sys/t/mdup-test.c: Introduce a `-v' option to help debug failures.
[mLib] / sys / t / mdup-test.c
index ef9429d30fe0e3590deff7d089653a16aa6b5e54..08ba0adaa8d600637f5735140508da4516af10d2 100644 (file)
@@ -21,8 +21,10 @@ int main(int argc, char *argv[])
   int flag[MAXFD];
   mdup_fd fds[MAXFD];
   int win = 1;
+  int verbose = 0;
 
   for (i = 1, j = 0; i < argc; i++) {
+    if (strcmp(argv[i], "-v") == 0) { verbose++; continue; }
     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)
@@ -33,9 +35,11 @@ int main(int argc, char *argv[])
   for (i = 0; i < MAXFD; i++) flag[i] = -1;
   for (i = 0; i < n; i++) {
     fd = fds[i].cur;
-    if (flag[fd] >= 0)
+    if (flag[fd] >= 0) {
       ino[i] = ino[flag[fd]];
-    else {
+      if (verbose)
+       printf("exist fd %d[%d] = ino %lu\n", fd, i, (unsigned long)ino[i]);
+    } else {
       flag[fd] = i;
       if ((fd2 = open(",delete-me",
                      O_WRONLY | O_CREAT | O_EXCL,
@@ -45,6 +49,8 @@ int main(int argc, char *argv[])
       if (fd2 != fd) { if (dup2(fd2, fd) < 0) fail("dup2"); close(fd2); }
       if (fstat(fd, &st)) fail("fstat");
       ino[i] = st.st_ino;
+      if (verbose)
+       printf("open fd %d[%d] = ino %lu\n", fd, i, (unsigned long)ino[i]);
     }
   }
 
@@ -59,7 +65,9 @@ int main(int argc, char *argv[])
       printf("fstat %d[%d] failed: %s\n", fd, i, strerror(errno));
       win = 0;
     } else if (st.st_ino != ino[i]) {
-      printf("ino %d[%d] wrong\n", fd, i);
+      if (!verbose) printf("ino %d[%d] wrong\n", fd, i);
+      else printf("ino %d[%d] = %lu != %lu\n", fd, i,
+                 (unsigned long)(st.st_ino), (unsigned long)ino[i]);
       win = 0;
     }
   }