dir: Make test utility build again
[openafs.git] / src / dir / dir.h
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 #if     !defined(__AFS_DIR_H)
11
12 #define __AFS_DIR_H
13
14 #define AFS_PAGESIZE 2048       /* bytes per page */
15 #define NHASHENT 128            /* entries in the hash tbl */
16 #define MAXPAGES 128            /* max pages in a dir */
17 #define BIGMAXPAGES 1023        /* new big max pages */
18 #define EPP 64                  /* dir entries per page */
19 #define LEPP 6                  /* log above */
20 /* When this next field changs, it is crucial to modify MakeDir, since the
21  * latter is responsible for marking these entries as allocated.  Also
22  * change the salvager. */
23 #define DHE 12                  /* entries in a dir header above a pages header alone. */
24
25 #define FFIRST 1
26 #define FNEXT 2
27
28 struct MKFid {                  /* A file identifier. */
29     afs_int32 vnode;            /* file's vnode slot */
30     afs_int32 vunique;          /* the slot incarnation number */
31 };
32
33 struct PageHeader {
34     /* A page header entry. */
35     unsigned short pgcount;     /* number of pages, or 0 if old-style */
36     unsigned short tag;         /* 1234 in network byte order */
37     char freecount;             /* unused, info in dirHeader structure */
38     char freebitmap[EPP / 8];
39     char padding[32 - (5 + EPP / 8)];
40 };
41
42 struct DirHeader {
43     /* A directory header object. */
44     struct PageHeader header;
45     char alloMap[MAXPAGES];     /* one byte per 2K page */
46     unsigned short hashTable[NHASHENT];
47 };
48
49 struct DirEntry {
50     /* A directory entry */
51     char flag;
52     char length;                /* currently unused */
53     unsigned short next;
54     struct MKFid fid;
55     char name[16];
56 };
57
58 struct DirXEntry {
59     /* A directory extension entry. */
60     char name[32];
61 };
62
63 struct DirPage0 {
64     /* A page in a directory. */
65     struct DirHeader header;
66     struct DirEntry entry[1];
67 };
68
69 struct DirPage1 {
70     /* A page in a directory. */
71     struct PageHeader header;
72     struct DirEntry entry[1];
73 };
74
75 /*
76  * Note that this declaration is seen in both the kernel code and the
77  * user space code.  One implementation is in afs/afs_buffer.c; the
78  * other is in dir/buffer.c.
79  */
80 extern int DVOffset(void *ap);
81
82
83 /* This is private to buffer.c */
84 struct buffer;
85
86 /* Prototypes */
87 extern int NameBlobs(char *name);
88 extern int Create(void *dir, char *entry, void *vfid);
89 extern int Length(void *dir);
90 extern int Delete(void *dir, char *entry);
91 extern int FindBlobs(void *dir, int nblobs);
92 extern void AddPage(void *dir, int pageno);
93 extern void FreeBlobs(void *dir, int firstblob, int nblobs);
94 extern int MakeDir(void *dir, afs_int32 * me, afs_int32 * parent);
95 extern int Lookup(void *dir, char *entry, void *fid);
96 extern int LookupOffset(void *dir, char *entry, void *fid, long *offsetp);
97 extern int EnumerateDir(void *dir,
98                         int (*hookproc) (void *dir, char *name,
99                                          afs_int32 vnode, afs_int32 unique),
100                         void *hook);
101 extern int IsEmpty(void *dir);
102 extern struct DirEntry *GetBlob(void *dir, afs_int32 blobno);
103 extern int DirHash(char *string);
104
105 extern int DStat(int *abuffers, int *acalls, int *aios);
106 extern void DRelease(void *loc, int flag);
107 extern int DVOffset(void *ap);
108 extern int DFlushVolume(afs_int32 vid);
109 extern int DFlushEntry(afs_int32 *fid);
110 extern int InverseLookup (void *dir, afs_uint32 vnode, afs_uint32 unique,
111                           char *name, afs_uint32 length);
112
113 /* The kernel uses different versions of these, and prototypes them
114    in afs_prototypes.h */
115 #ifndef KERNEL
116 extern int DInit(int abuffers);
117 extern void *DRead(afs_int32 *fid, int page);
118 extern int DFlush(void);
119 extern void *DNew(afs_int32 *fid, int page);
120 extern void DZap(afs_int32 *fid);
121
122 /* salvage.c */
123
124 extern int DirOK(void *);
125 extern int DirSalvage(void *, void *, afs_int32, afs_int32,
126                       afs_int32, afs_int32);
127
128 #endif
129
130 #ifdef KERNEL
131 extern int afs_dir_NameBlobs(char *name);
132 extern int afs_dir_Create(void *dir, char *entry, void *vfid);
133 extern int afs_dir_Length(void *dir);
134 extern int afs_dir_Delete(void *dir, char *entry);
135 extern int afs_dir_MakeDir(void *dir, afs_int32 * me, afs_int32 * parent);
136 extern int afs_dir_Lookup(void *dir, char *entry, void *fid);
137 extern int afs_dir_LookupOffset(void *dir, char *entry, void *fid,
138                                 long *offsetp);
139 extern int afs_dir_EnumerateDir(void *dir,
140                                 int (*hookproc) (void *dir, char *name,
141                                                  afs_int32 vnode,
142                                                  afs_int32 unique),
143                                 void *hook);
144 extern int afs_dir_IsEmpty(void *dir);
145 extern int afs_dir_ChangeFid(void *dir, char *entry, afs_uint32 *old_fid,
146                              afs_uint32 *new_fid);
147 extern struct DirEntry *afs_dir_GetBlob(void *dir, afs_int32 blobno);
148 #endif
149
150 #endif /*       !defined(__AFS_DIR_H) */