2 * $Id: cnid_private.h,v 1.11 2002-05-30 06:41:19 jmarcus Exp $
5 #ifndef LIBATALK_CNID_PRIVATE_H
6 #define LIBATALK_CNID_PRIVATE_H 1
13 #endif /* HAVE_UNISTD_H */
17 #include <atalk/adouble.h>
18 #include <atalk/cnid.h>
20 #define CNID_DB_MAGIC 0x434E4944U /* CNID */
21 #define CNID_DATA_MAGIC 0x434E4945U /* CNIE */
23 #define CNID_DEVINO_LEN 8
24 #define CNID_DID_LEN 4
25 #define CNID_HEADER_LEN (CNID_DEVINO_LEN + CNID_DID_LEN)
29 #define CNIDFLAG_ROOTINFO_RO (1 << 0)
30 #define CNIDFLAG_DB_RO (1 << 1)
32 /* the key is in the form of a did/name pair. in this case,
33 * we use 0/RootInfo. */
34 #define ROOTINFO_KEY "\0\0\0\0RootInfo"
35 #define ROOTINFO_KEYLEN 12
37 typedef struct CNID_private {
44 #endif /* FILE_MANGLING */
49 #endif /* EXTENDED_DB */
52 char lock_file[MAXPATHLEN + 1];
55 /* on-disk data format (in network byte order where appropriate) --
56 * db_cnid: (key: cnid)
57 * name size (in bytes)
61 * unix name strlen(name) + 1
63 * db_didname: (key: did/unix name)
64 * -- this also caches the bits of .AppleDouble used by FPGetFilDirParam
65 * so that we don't have to open the header file.
66 * NOTE: FPCatSearch has to search through all of the directories as
67 * this stuff doesn't get entered until needed.
68 * if the entire volume is in the database, though, we can use
69 * cursor operations to make this faster.
71 * version number is stored with did/name key of 0/0
74 * modfiller 4 (dates only use 4 bytes right now, but we leave space
75 * moddate 4 for 8. moddate is also used to keep this info
76 * createfiller 4 up-to-date.)
80 * accfiller 4 (unused)
82 * AFP info 4 (stores a couple permission bits as well)
87 * macname 32 (nul-terminated)
88 * shortname 12 (nul-terminated)
89 * longname longnamelen (nul-terminated)
91 * 132 bytes + longnamelen
93 * db_devino: (key: dev/ino)
94 * -- this is only used for consistency checks and isn't 1-1
97 * these correspond to the different path types. longname is for the
98 * 255 unicode character names (path type == ?), macname is for the
99 * 32-character names (path type == 2), and shortname is for the
100 * 8+3-character names (path type == 1).
102 * db_longname: (key: did/longname)
103 * name namelen = strlen(name) + 1
105 * db_macname: (key: did/macname)
106 * name namelen = strlen(name) + 1
108 * db_shortname: (key: did/shortname)
109 * name namelen = strlen(name) + 1
114 #endif /* __inline__ */
116 /* construct db_cnid data. NOTE: this is not re-entrant. */
117 static __inline__ char *make_cnid_data(const struct stat *st,
119 const char *name, const int len)
121 static char start[CNID_HEADER_LEN + MAXPATHLEN + 1];
125 if (len > MAXPATHLEN)
128 i = htonl(st->st_dev);
129 buf = memcpy(buf, &i, sizeof(i));
130 i = htonl(st->st_ino);
131 buf = memcpy(buf + sizeof(i), &i, sizeof(i));
132 /* did is already in network byte order */
133 buf = memcpy(buf + sizeof(i), &did, sizeof(did));
134 buf = memcpy(buf + sizeof(did), name, len);
141 #endif /* atalk/cnid/cnid_private.h */