xref: /plan9/sys/src/cmd/paqfs/paqfs.h (revision fe853e2326f51910bb38886e9bfc22ecdef993d7)
1 typedef struct PaqHeader PaqHeader;
2 typedef struct PaqBlock PaqBlock;
3 typedef struct PaqTrailer PaqTrailer;
4 typedef struct PaqDir PaqDir;
5 
6 enum {
7 	HeaderMagic = 0x529ab12b,
8 	HeaderSize = 44,
9 	BigHeaderMagic = 0x25a9,
10 	BlockMagic = 0x198a1cbf,
11 	BlockSize = 12,
12 	BigBlockMagic = 0x91a8,
13 	TrailerMagic = 0x6b46e688,
14 	TrailerSize = 28,
15 	Version = 1,
16 	MaxBlockSize = 512*1024,
17 	MinBlockSize = 512,
18 	MinDirSize = 28,
19 };
20 
21 /* block types */
22 enum {
23 	DirBlock,
24 	DataBlock,
25 	PointerBlock,
26 };
27 
28 /* encodings */
29 enum {
30 	NoEnc,
31 	DeflateEnc,
32 };
33 
34 struct PaqHeader
35 {
36 	ulong	magic;
37 	ushort	version;
38 	ulong	blocksize;
39 	ulong	time;
40 	char	label[32];
41 };
42 
43 struct PaqBlock
44 {
45 	ulong	magic;
46 	ulong	size;		/* data size - always <= blocksize */
47 	uchar	type;
48 	uchar	encoding;
49 	ulong	adler32;	/* applied to unencoded data */
50 };
51 
52 struct PaqTrailer
53 {
54 	ulong	magic;
55 	ulong	root;
56 	uchar	sha1[20];
57 };
58 
59 struct PaqDir
60 {
61 	ulong	qid;
62 	ulong	mode;
63 	ulong	mtime;
64 	ulong	length;
65 	ulong	offset;		/* to pointer block */
66 	char 	*name;
67 	char	*uid;
68 	char	*gid;
69 };
70