2 #define __CM_DIR_ENV__ 1
4 * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved
6 * (C) COPYRIGHT IBM CORPORATION 1987, 1988
7 * LICENSED MATERIALS - PROPERTY OF IBM
12 * (C) COPYRIGHT IBM CORPORATION 1987
13 * LICENSED MATERIALS - PROPERTY OF IBM
16 #define CM_DIR_PAGESIZE 2048 /* bytes per page */
17 #define CM_DIR_NHASHENT 128 /* entries in the hash tbl */
18 #define CM_DIR_MAXPAGES 128 /* max pages in a dir */
19 #define CM_DIR_BIGMAXPAGES 1023 /* new big max pages */
20 #define CM_DIR_EPP 64 /* dir entries per page */
21 #define CM_DIR_LEPP 6 /* log above */
22 #define CM_DIR_CHUNKSIZE 32 /* bytes per dir entry chunk */
24 /* When this next field changs, it is crucial to modify MakeDir, since the latter is
25 * responsible for marking these entries as allocated. Also change
28 #define CM_DIR_DHE 12 /* entries in a dir header above a pages
32 typedef struct cm_dirFid {
33 /* A file identifier. */
34 afs_int32 vnode; /* file's vnode slot */
35 afs_int32 unique; /* the slot incarnation number */
38 typedef struct cm_pageHeader {
39 /* A page header entry. */
40 unsigned short pgcount; /* number of pages, or 0 if old-style */
41 unsigned short tag; /* 1234 in network byte order */
42 char freeCount; /* unused, info in dirHeader structure */
43 char freeBitmap[CM_DIR_EPP/8];
44 char padding[32-(5+CM_DIR_EPP/8)]; /* pad to one 32-byte entry */
47 /* a total of 13 32-byte entries, 1 for the header that in all pages, and
48 * 12 more special ones for the entries in a the first page.
50 typedef struct cm_dirHeader {
51 /* A directory header object. */
52 cm_pageHeader_t header;
53 char alloMap[CM_DIR_MAXPAGES]; /* one byte per 2K page */
54 unsigned short hashTable[CM_DIR_NHASHENT];
57 /* this represents a directory entry. We use strlen to find out how many bytes are
58 * really in the dir entry; it is always a multiple of 32.
60 typedef struct cm_dirEntry {
61 /* A directory entry */
63 char length; /* currently unused */
69 typedef struct cm_dirXEntry {
70 /* A directory extension entry. */
74 typedef struct cm_dirPage0 {
75 /* A page in a directory. */
76 cm_dirHeader_t header;
77 cm_dirEntry_t entry[1];
80 typedef struct cm_dirPage1 {
81 /* A page in a directory. */
82 cm_pageHeader_t header;
83 cm_dirEntry_t entry[1];
86 extern int cm_NameEntries(char *namep, size_t *lenp);
88 #endif /* __CM_DIR_ENV__ */