2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 #include <afsconfig.h>
12 #include <afs/param.h>
27 typedef struct dirhandle {
35 printf("Usage: dtest <command [args]>, where command is one of:\n");
36 printf("-l file - lists directory in file\n");
37 printf("-c file - checks directory in file\n");
38 printf("-s ifile ofile - salvages directory in ifile, places in ofile\n");
39 printf("-f file name count - creates count names based on \"name\" in directory in file\n");
40 printf("-d file name - delete name from directory in file\n");
41 printf("-r file name - lookup name in directory\n");
42 printf("-a file name - add name to directory in file\n");
55 switch ((*argv++)[1]) {
56 case 'l': ListDir(*argv); break;
57 case 'c': CheckDir(*argv); break;
58 case 's': SalvageDir(*argv, argv[1]); break;
59 case 'f': CRTest(*argv, argv[1], atoi(argv[2])); break;
60 case 'd': DelTest(*argv, argv[1]); break;
61 case 'r': LookupDir(*argv, argv[1]); break;
62 case 'a': AddEntry(*argv, argv[1]); break;
69 LookupDir(dname, ename)
70 register char *dname, *ename; {
75 code = Lookup(&dir, ename, fid);
76 if (code) printf("lookup code %d\n", code);
78 printf("Found fid %d.%d for file '%s'\n", fid[1], fid[2], ename);
83 AddEntry(dname, ename)
84 register char *dname, *ename; {
88 fid[1] = fidCounter++;
91 code = Create(&dir, ename, fid);
92 if (code) printf("create code %d\n", code);
102 EnumerateDir(&dir, ListEntry, 0);
105 ListEntry(handle, name, vnode, unique)
106 long handle, vnode, unique;
109 printf("%s\t%d\t%d\n", name, vnode, unique);
117 if (DirOK(&dir)) printf("Directory ok.\n");
118 else printf ("Directory bad\n");
121 SalvageDir(iname, oname)
125 long myFid[3], parentFid[3];
127 if ( Lookup(in, ".", myFid) || Lookup(in, "..", parentFid) )
129 printf("Lookup of \".\" and/or \"..\" failed: ");
130 printf("%d %d %d %d\n",myFid[1],myFid[2],parentFid[1],parentFid[2]);
131 printf("Directory cannnot be salvaged\n");
133 CreateDir(oname, &out);
134 DirSalvage(&in, &out, myFid[1],myFid[2],parentFid[1],parentFid[2]);
138 DelTest(dname, ename)
144 OpenDir(dname, &dir);
145 code = Delete(&dir, ename);
146 if (code) printf("delete code is %d\n", code);
150 CRTest(dname, ename, count)
155 register long i, code;
159 CreateDir(dname, &dir);
160 bzero(fid, sizeof(fid));
161 MakeDir(&dir, fid, fid);
162 for(i=0;i<count;i++) {
163 sprintf(tbuffer, "%s%d", ename, i);
164 fid[1] = fidCounter++;
166 code = Create(&dir, tbuffer, &fid);
172 printf("code for '%s' is %d\n", tbuffer, code);
183 dir->fd = open(name, O_RDWR, 0666);
185 printf("Couldn't open %s\n", name);
195 dir->fd = open(name, O_CREAT|O_RDWR|O_TRUNC, 0666);
198 printf("Couldn't create %s\n", name);
203 ReallyRead(dir, block, data)
209 if (lseek(dir->fd, block*PAGESIZE, 0) == -1)
211 code = read(dir->fd, data, PAGESIZE);
214 if (code != PAGESIZE)
219 ReallyWrite(dir, block, data)
225 if (lseek(dir->fd, block*PAGESIZE, 0) == -1)
227 code = write(dir->fd, data, PAGESIZE);
230 if (code != PAGESIZE)
242 dirhandle *dir1, *dir2;
244 return (dir1->uniq == dir2->uniq);
247 FidCpy(todir, fromdir)
248 dirhandle *todir, *fromdir;
256 printf("Something died with this message: %s\n", msg);
259 Log(a,b,c,d,e,f,g,h,i,j,k,l,m,n) {
260 printf(a,b,c,d,e,f,g,h,i,j,k,l,m,n);