dir: dtest should flush on error when creating directories
[openafs.git] / src / dir / test / dtest.c
index 446918b..20eeb5a 100644 (file)
 #include <afsconfig.h>
 #include <afs/param.h>
 
+#include <roken.h>
 
-#ifdef AFS_NT40_ENV
-#include <fcntl.h>
-#include <windows.h>
-#else
-#include <sys/file.h>
-#endif
-#include <stdio.h>
-#include <errno.h>
+#include <afs/dir.h>
+#include <afs/opr.h>
 
 long fidCounter = 0;
 
-typedef struct dirhandle {
+typedef struct DirHandle {
     int fd;
     int uniq;
 } dirhandle;
 int Uniq;
 
-void
+static void OpenDir(char *name, dirhandle *dir);
+static void CreateDir(char *name, dirhandle *dir);
+
+static void
 Usage(void)
 {
     printf("Usage: dtest <command [args]>, where command is one of:\n");
@@ -44,52 +42,15 @@ Usage(void)
     exit(1);
 }
 
-main(argc, argv)
-     char **argv;
-{
-    DInit(600);
-    argc--;
-    argv++;
-
-    if (argc == 0)
-       Usage();
-
-    switch ((*argv++)[1]) {
-    case 'l':
-       ListDir(*argv);
-       break;
-    case 'c':
-       CheckDir(*argv);
-       break;
-    case 's':
-       SalvageDir(*argv, argv[1]);
-       break;
-    case 'f':
-       CRTest(*argv, argv[1], atoi(argv[2]));
-       break;
-    case 'd':
-       DelTest(*argv, argv[1]);
-       break;
-    case 'r':
-       LookupDir(*argv, argv[1]);
-       break;
-    case 'a':
-       AddEntry(*argv, argv[1]);
-       break;
-    default:
-       Usage();
-    }
-    exit(0);
-}
-
-LookupDir(dname, ename)
-     char *dname, *ename;
+static void
+LookupDir(char *dname, char *ename)
 {
     dirhandle dir;
-    long fid[3], code;
+    afs_int32 fid[3];
+    int code;
 
     OpenDir(dname, &dir);
-    code = Lookup(&dir, ename, fid);
+    code = afs_dir_Lookup(&dir, ename, fid);
     if (code)
        printf("lookup code %d\n", code);
     else {
@@ -98,39 +59,41 @@ LookupDir(dname, ename)
     DFlush();
 }
 
-AddEntry(dname, ename)
-     char *dname, *ename;
+static void
+AddEntry(char *dname, char *ename)
 {
     dirhandle dir;
-    long fid[3], code;
+    afs_int32 fid[3];
+    int code;
 
     fid[1] = fidCounter++;
     fid[2] = 3;
     OpenDir(dname, &dir);
-    code = Create(&dir, ename, fid);
+    code = afs_dir_Create(&dir, ename, fid);
     if (code)
        printf("create code %d\n", code);
     DFlush();
 }
 
-ListDir(name)
-     char *name;
+static int
+ListEntry(void * handle, char *name, afs_int32 vnode, afs_int32 unique)
 {
-    extern ListEntry();
-    dirhandle dir;
-    OpenDir(name, &dir);
-    EnumerateDir(&dir, ListEntry, 0);
+    printf("%s\t%ld\t%ld\n", name, afs_printable_int32_ld(vnode),
+          afs_printable_int32_ld(unique));
+
+    return 0;
 }
 
-ListEntry(handle, name, vnode, unique)
-     long handle, vnode, unique;
-     char *name;
+static void
+ListDir(char *name)
 {
-    printf("%s\t%d\t%d\n", name, vnode, unique);
+    dirhandle dir;
+    OpenDir(name, &dir);
+    afs_dir_EnumerateDir(&dir, ListEntry, 0);
 }
 
-CheckDir(name)
-     char *name;
+static void
+CheckDir(char *name)
 {
     dirhandle dir;
     OpenDir(name, &dir);
@@ -140,13 +103,15 @@ CheckDir(name)
        printf("Directory bad\n");
 }
 
-SalvageDir(iname, oname)
-     char *iname, *oname;
+static void
+SalvageDir(char *iname, char *oname)
 {
     dirhandle in, out;
-    long myFid[3], parentFid[3];
+    afs_int32 myFid[3], parentFid[3];
+
     OpenDir(iname, &in);
-    if (Lookup(in, ".", myFid) || Lookup(in, "..", parentFid)) {
+    if (afs_dir_Lookup(&in, ".", myFid) || 
+       afs_dir_Lookup(&in, "..", parentFid)) {
        printf("Lookup of \".\" and/or \"..\" failed: ");
        printf("%d %d %d %d\n", myFid[1], myFid[2], parentFid[1],
               parentFid[2]);
@@ -157,53 +122,50 @@ SalvageDir(iname, oname)
     DFlush();
 }
 
-DelTest(dname, ename)
-     char *dname;
-     char *ename;
+static void
+DelTest(char *dname, char *ename)
 {
     dirhandle dir;
-    long code;
+    int code;
 
     OpenDir(dname, &dir);
-    code = Delete(&dir, ename);
+    code = afs_dir_Delete(&dir, ename);
     if (code)
        printf("delete code is %d\n", code);
     DFlush();
 }
 
-CRTest(dname, ename, count)
-     char *dname;
-     char *ename;
-     int count;
+static void
+CRTest(char *dname, char *ename, int count)
 {
     char tbuffer[200];
-    long i, code;
-    long fid[3];
+    int i;
+    afs_int32 fid[3];
     dirhandle dir;
+    int code;
 
     CreateDir(dname, &dir);
     memset(fid, 0, sizeof(fid));
-    MakeDir(&dir, fid, fid);
+    afs_dir_MakeDir(&dir, fid, fid);
     for (i = 0; i < count; i++) {
        sprintf(tbuffer, "%s%d", ename, i);
        fid[1] = fidCounter++;
        fid[2] = count;
-       code = Create(&dir, tbuffer, &fid);
+       code = afs_dir_Create(&dir, tbuffer, &fid);
        if (i % 100 == 0) {
            printf("#");
            fflush(stdout);
        }
        if (code) {
            printf("code for '%s' is %d\n", tbuffer, code);
-           return;
+           break;
        }
     }
     DFlush();
 }
 
-OpenDir(name, dir)
-     char *name;
-     dirhandle *dir;
+static void
+OpenDir(char *name, dirhandle *dir)
 {
     dir->fd = open(name, O_RDWR, 0666);
     if (dir->fd == -1) {
@@ -213,9 +175,8 @@ OpenDir(name, dir)
     dir->uniq = ++Uniq;
 }
 
-CreateDir(name, dir)
-     char *name;
-     dirhandle *dir;
+static void
+CreateDir(char *name, dirhandle *dir)
 {
     dir->fd = open(name, O_CREAT | O_RDWR | O_TRUNC, 0666);
     dir->uniq = ++Uniq;
@@ -225,10 +186,8 @@ CreateDir(name, dir)
     }
 }
 
-ReallyRead(dir, block, data)
-     dirhandle *dir;
-     int block;
-     char *data;
+int
+ReallyRead(dirhandle *dir, int block, char *data)
 {
     int code;
     if (lseek(dir->fd, block * PAGESIZE, 0) == -1)
@@ -241,10 +200,8 @@ ReallyRead(dir, block, data)
     return 0;
 }
 
-ReallyWrite(dir, block, data)
-     dirhandle *dir;
-     int block;
-     char *data;
+int
+ReallyWrite(dirhandle *dir, int block, char *data)
 {
     int code;
     if (lseek(dir->fd, block * PAGESIZE, 0) == -1)
@@ -257,45 +214,87 @@ ReallyWrite(dir, block, data)
     return 0;
 }
 
-FidZap(dir)
-     dirhandle *dir;
+void
+FidZap(dirhandle *dir)
 {
     dir->fd = -1;
 }
 
-int
-FidZero(afid)
-     long *afid;
+void
+FidZero(afs_int32 *afid)
 {
     *afid = 0;
 }
 
-FidEq(dir1, dir2)
-     dirhandle *dir1, *dir2;
+int
+FidEq(dirhandle *dir1, dirhandle *dir2)
 {
     return (dir1->uniq == dir2->uniq);
 }
 
 int
-FidVolEq(afid, bfid)
-     long *afid, *bfid;
+FidVolEq(afs_int32 *afid, afs_int32 *bfid)
 {
     return 1;
 }
 
-FidCpy(todir, fromdir)
-     dirhandle *todir, *fromdir;
+void
+FidCpy(dirhandle *todir, dirhandle *fromdir)
 {
     *todir = *fromdir;
 }
 
-Die(msg)
-     char *msg;
+void
+Die(const char *msg)
 {
     printf("Something died with this message:  %s\n", msg);
+    opr_abort();
+}
+
+void
+Log(const char *fmt, ...)
+{
+    va_list ap;
+
+    va_start(ap, fmt);
+    vprintf(fmt, ap);
+    va_end(ap);
 }
 
-Log(a, b, c, d, e, f, g, h, i, j, k, l, m, n)
+int
+main(int argc, char **argv)
 {
-    printf(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+    DInit(600);
+    argc--;
+    argv++;
+
+    if (argc == 0)
+       Usage();
+
+    switch ((*argv++)[1]) {
+    case 'l':
+       ListDir(*argv);
+       break;
+    case 'c':
+       CheckDir(*argv);
+       break;
+    case 's':
+       SalvageDir(*argv, argv[1]);
+       break;
+    case 'f':
+       CRTest(*argv, argv[1], atoi(argv[2]));
+       break;
+    case 'd':
+       DelTest(*argv, argv[1]);
+       break;
+    case 'r':
+       LookupDir(*argv, argv[1]);
+       break;
+    case 'a':
+       AddEntry(*argv, argv[1]);
+       break;
+    default:
+       Usage();
+    }
+    exit(0);
 }