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 #ifndef __CM_DIR_ENV__
11 #define __CM_DIR_ENV__ 1
13 #define CM_DIR_PAGESIZE 2048 /* bytes per page */
14 #define CM_DIR_NHASHENT 128 /* entries in the hash tbl */
15 #define CM_DIR_MAXPAGES 128 /* max pages in a dir */
16 #define CM_DIR_BIGMAXPAGES 1023 /* new big max pages */
17 #define CM_DIR_EPP 64 /* dir entries per page */
18 #define CM_DIR_LEPP 6 /* log above */
19 #define CM_DIR_CHUNKSIZE 32 /* bytes per dir entry chunk */
21 /* When this next field changs, it is crucial to modify MakeDir, since the latter is
22 * responsible for marking these entries as allocated. Also change
25 #define CM_DIR_DHE 12 /* entries in a dir header above a pages
29 typedef struct cm_dirFid {
30 /* A file identifier. */
31 afs_int32 vnode; /* file's vnode slot */
32 afs_int32 unique; /* the slot incarnation number */
35 typedef struct cm_pageHeader {
36 /* A page header entry. */
37 unsigned short pgcount; /* number of pages, or 0 if old-style */
38 unsigned short tag; /* 1234 in network byte order */
39 char freeCount; /* unused, info in dirHeader structure */
40 char freeBitmap[CM_DIR_EPP/8];
41 char padding[32-(5+CM_DIR_EPP/8)]; /* pad to one 32-byte entry */
44 /* a total of 13 32-byte entries, 1 for the header that in all pages, and
45 * 12 more special ones for the entries in a the first page.
47 typedef struct cm_dirHeader {
48 /* A directory header object. */
49 cm_pageHeader_t header;
50 char alloMap[CM_DIR_MAXPAGES]; /* one byte per 2K page */
51 unsigned short hashTable[CM_DIR_NHASHENT];
54 /* this represents a directory entry. We use strlen to find out how many bytes are
55 * really in the dir entry; it is always a multiple of 32.
57 typedef struct cm_dirEntry {
58 /* A directory entry */
60 char length; /* currently unused */
66 typedef struct cm_dirXEntry {
67 /* A directory extension entry. */
71 typedef struct cm_dirPage0 {
72 /* A page in a directory. */
73 cm_dirHeader_t header;
74 cm_dirEntry_t entry[1];
77 typedef struct cm_dirPage1 {
78 /* A page in a directory. */
79 cm_pageHeader_t header;
80 cm_dirEntry_t entry[1];
83 extern int cm_NameEntries(char *namep, size_t *lenp);
85 #endif /* __CM_DIR_ENV__ */