X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/236f657b6dab66f31f4902cecfc03b4673f5bb98..7cf5c72a6d353ed5a7e340562c11e54c21c85e5e:/sys/mdup-test.c diff --git a/sys/mdup-test.c b/sys/mdup-test.c deleted file mode 100644 index d2a198a..0000000 --- a/sys/mdup-test.c +++ /dev/null @@ -1,75 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include "mdup.h" - -#define MAXFD 256 - -static void fail(const char *what) { perror(what); exit(1); } - -int main(int argc, char *argv[]) -{ - int i, n; - int fd, fd2; - struct stat st; - int ino[MAXFD]; - int flag[MAXFD]; - 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); - } - } - n = argc - 1; - for (i = 0; i < MAXFD; i++) flag[i] = -1; - for (i = 0; i < n; i++) { - fd = fds[i].cur; - if (flag[fd] >= 0) - ino[i] = ino[flag[fd]]; - else { - flag[fd] = i; - if ((fd2 = open(",delete-me", - O_WRONLY | O_CREAT | O_EXCL, - 0700)) < 0) - fail("creat"); - unlink(",delete-me"); - if (fd2 != fd) { - if (dup2(fd2, fd) < 0) fail("dup2"); - close(fd2); - } - if (fstat(fd, &st)) fail("fstat"); - ino[i] = st.st_ino; - } - } - - if (mdup(fds, n)) fail("mdup"); - - for (i = 0; i < n; i++) { - fd = fds[i].cur; - if (fds[i].want != -1 && fds[i].want != fd) { - printf("fd %d[%d] != %d\n", fd, i, fds[i].want); - win = 0; - } else if (fstat(fd, &st)) { - 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); - win = 0; - } - } - - return (!win); -}