include-afsconfig-before-param-h-20010712
[openafs.git] / src / vol / test / nincdec.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
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
8  */
9
10 /* nicreate
11  * Test "inode" creation in the user space file system.
12  */
13
14 #include <afsconfig.h>
15 #include <afs/param.h>
16
17 RCSID("$Header$");
18
19 #ifdef AFS_NAMEI_ENV
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <errno.h>
23 #include <fcntl.h>
24 #include <fcntl.h>
25 #include <sys/stat.h>
26 #include <lock.h>
27 #include <afs/afsutil.h>
28 #include "nfs.h"
29 #include <afs/afsint.h>
30 #include "ihandle.h"
31 #include "vnode.h"
32 #include "volume.h"
33 #include "viceinode.h"
34 #include "voldefs.h"
35 #include "partition.h"
36 #include <dirent.h>
37 #include <afs/assert.h>
38
39
40 char *prog = "nincdec";
41 IHandle_t * GetLinkHandle(char *part, int volid);
42
43
44 void Usage(void)
45 {
46     printf("Usage: %s <part> <volid> <-i ino | -v vno uniq tag> <inc|dec>\n",
47            prog);
48     exit(1);
49 }
50
51 main(int ac, char **av)
52 {
53     char *part;
54     int volid;
55     Inode ino;
56     Inode vno;
57     Inode tag;
58     Inode uniq;
59     int code;
60     IHandle_t *lh;
61     int do_inc = -1;
62     char *incdecarg;
63     int i;
64
65
66     if (ac < 5) Usage();
67
68     part = av[1];
69     volid = atoi(av[2]);
70     
71     i = 4;
72     if (!strcmp(av[3], "-i")) {
73         code = sscanf(av[i++], "%Lu", &ino);
74         if (code != 1) {
75             printf("Failed to get inode from %s\n", av[4]);
76             exit(1);
77         }
78     }
79     else if (!strcmp(av[3], "-v")) {
80         vno = (int64_t)atoi(av[i++]);
81         vno &= 0x3ffffff;
82         tag = (int64_t)atoi(av[i++]);
83         uniq = (int64_t)atoi(av[i++]);
84         ino = uniq;
85         ino |= tag << 32;
86         ino |= vno << 35;
87         printf("ino=%Lu\n", ino);
88     }
89     else {
90         printf("Expected \"-i\" or \"-v\" for inode value\n");
91         Usage();
92     }
93
94     incdecarg = av[i++];
95     if (!strcmp(incdecarg, "dec")) do_inc = 0;
96     else if (!strcmp(incdecarg, "inc")) do_inc = 1;
97     else {
98         printf("%s: Expected \"inc\" or \"dec\"\n", incdecarg);
99         Usage();
100     }
101
102     
103     lh = GetLinkHandle(part, volid);
104     if (!lh) {
105         printf("Failed to get link handle, exiting\n");
106         exit(1);
107     }
108
109     if (do_inc)
110         code = namei_inc(lh, ino, volid);
111     else
112         code = namei_dec(lh, ino, volid);
113     
114     printf("namei_%s returned %d\n", do_inc ? "inc" : "dec", code);
115
116     exit(0);
117
118 }
119
120 #endif /* AFS_NAMEI_ENV */