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
10 #if !defined(__AFS_DIR_H)
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 latter is responsible for marking these entries as allocated. Also change the salvager. */
21 #define DHE 12 /* entries in a dir header above a pages header alone. */
27 { /* A file identifier. */
28 afs_int32 vnode; /* file's vnode slot */
29 afs_int32 vunique; /* the slot incarnation number */
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)];
44 /* A directory header object. */
45 struct PageHeader header;
46 char alloMap[MAXPAGES]; /* one byte per 2K page */
47 unsigned short hashTable[NHASHENT];
52 /* A directory entry */
54 char length; /* currently unused */
62 /* A directory extension entry. */
68 /* A page in a directory. */
69 struct DirHeader header;
70 struct DirEntry entry[1];
75 /* A page in a directory. */
76 struct PageHeader header;
77 struct DirEntry entry[1];
81 * Note that this declaration is seen in both the kernel code and the
82 * user space code. One implementation is in afs/afs_buffer.c; the
83 * other is in dir/buffer.c.
85 extern int DVOffset(void *ap);
90 extern int NameBlobs (char *name);
91 extern int Create (void *dir, char *entry, void *vfid);
92 extern int Length (void *dir);
93 extern int Delete (void *dir, char *entry);
94 extern int FindBlobs (void *dir, int nblobs);
95 extern void AddPage (void *dir, int pageno);
96 extern void FreeBlobs(void *dir, register int firstblob, int nblobs);
97 extern int MakeDir (void *dir, afs_int32 *me, afs_int32 *parent);
98 extern int Lookup (void *dir, char *entry, void *fid);
99 extern int LookupOffset (void *dir, char *entry, void *fid, long *offsetp);
100 extern int EnumerateDir (void *dir, int (*hookproc)(void *dir, char *name, afs_int32 vnode, afs_int32 unique), void *hook);
101 extern int IsEmpty (void *dir);
102 extern struct DirEntry *GetBlob (void *dir, afs_int32 blobno);
103 extern int DirHash (register char *string);
106 extern int afs_dir_NameBlobs (char *name);
107 extern int afs_dir_Create (void *dir, char *entry, void *vfid);
108 extern int afs_dir_Length (void *dir);
109 extern int afs_dir_Delete (void *dir, char *entry);
110 extern int afs_dir_MakeDir (void *dir, afs_int32 *me, afs_int32 *parent);
111 extern int afs_dir_Lookup (void *dir, char *entry, void *fid);
112 extern int afs_dir_LookupOffset (void *dir, char *entry, void *fid, long *offsetp);
113 extern int afs_dir_EnumerateDir (void *dir, int (*hookproc)(void *dir, char *name, afs_int32 vnode, afs_int32 unique), void *hook);
114 extern int afs_dir_IsEmpty (void *dir);
115 extern struct DirEntry *afs_dir_GetBlob (void *dir, afs_int32 blobno);
118 #endif /* !defined(__AFS_DIR_H) */