netatalk  4.4.0dev
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
cnid_private.h
Go to the documentation of this file.
1/*
2 * Common defines for cnid
3 */
4
5#ifndef _ATALK_CNID_PRIVATE_H
6#define _ATALK_CNID_PRIVATE_H 1
7
8#define CNID_OFS 0
9#define CNID_LEN 4
10
11#define CNID_DEV_OFS CNID_LEN
12#define CNID_DEV_LEN 8
13
14#define CNID_INO_OFS (CNID_DEV_OFS + CNID_DEV_LEN)
15#define CNID_INO_LEN 8
16
17#define CNID_DEVINO_OFS CNID_LEN
18#define CNID_DEVINO_LEN (CNID_DEV_LEN + CNID_INO_LEN)
19
20#define CNID_TYPE_OFS (CNID_DEVINO_OFS + CNID_DEVINO_LEN)
21#define CNID_TYPE_LEN 4
22
23#define CNID_DID_OFS (CNID_TYPE_OFS + CNID_TYPE_LEN)
24#define CNID_DID_LEN CNID_LEN
25
26#define CNID_NAME_OFS (CNID_DID_OFS + CNID_DID_LEN)
27#define CNID_HEADER_LEN (CNID_NAME_OFS)
28
29#define CNIDFLAG_ROOTINFO_RO (1 << 0)
30#define CNIDFLAG_DB_RO (1 << 1)
31
32/* special key/data pair we use to store current cnid and database stamp in cnid2.db */
33
34#define ROOTINFO_KEY "\0\0\0\0"
35#define ROOTINFO_KEYLEN 4
36
37/*
38 Rootinfo data, fields as they are used by normal entries for CNIDs (for reference):
39 4 bytes: CNID
40 8 bytes: dev
41 8 bytes: inode
42 4 bytes: is a file/directory (type)
43 4 bytes: DID
44 x bytes: name
45
46 Contents in Rootinfo entry:
47 4 bytes: 0
48 8 bytes: db stamp: struct stat.st_ctime of database file
49 8 bytes: unused
50 4 bytes: last used CNID
51 4 bytes: version as htonl(uint32_t)
52 9 bytes: name "RootInfo"
53*/
54#define ROOTINFO_DATA "\0\0\0\0" \
55 "\0\0\0\0\0\0\0\0" \
56 "\0\0\0\0\0\0\0\0" \
57 "\0\0\0\0" \
58 "\0\0\0\0" \
59 "RootInfo"
60#define ROOTINFO_DATALEN (3*4 + 2*8 + 9)
61
62/*
63 * CNID version history:
64 * 0: up to Netatalk 2.1.x
65 * 1: starting with 2.2, additional name index, used in cnid_find
66 */
67#define CNID_VERSION_0 0
68#define CNID_VERSION_1 1
69#define CNID_VERSION_UNINTIALIZED_DB UINT32_MAX
70
71/* Current CNID version */
72#define CNID_VERSION CNID_VERSION_1
73
74#endif