xref: /plan9/sys/src/cmd/paqfs/paqfs.h (revision fe853e2326f51910bb38886e9bfc22ecdef993d7)
19a747e4fSDavid du Colombier typedef struct PaqHeader PaqHeader;
29a747e4fSDavid du Colombier typedef struct PaqBlock PaqBlock;
39a747e4fSDavid du Colombier typedef struct PaqTrailer PaqTrailer;
49a747e4fSDavid du Colombier typedef struct PaqDir PaqDir;
59a747e4fSDavid du Colombier 
69a747e4fSDavid du Colombier enum {
79a747e4fSDavid du Colombier 	HeaderMagic = 0x529ab12b,
89a747e4fSDavid du Colombier 	HeaderSize = 44,
9*fe853e23SDavid du Colombier 	BigHeaderMagic = 0x25a9,
109a747e4fSDavid du Colombier 	BlockMagic = 0x198a1cbf,
119a747e4fSDavid du Colombier 	BlockSize = 12,
12*fe853e23SDavid du Colombier 	BigBlockMagic = 0x91a8,
139a747e4fSDavid du Colombier 	TrailerMagic = 0x6b46e688,
149a747e4fSDavid du Colombier 	TrailerSize = 28,
159a747e4fSDavid du Colombier 	Version = 1,
16*fe853e23SDavid du Colombier 	MaxBlockSize = 512*1024,
179a747e4fSDavid du Colombier 	MinBlockSize = 512,
189a747e4fSDavid du Colombier 	MinDirSize = 28,
199a747e4fSDavid du Colombier };
209a747e4fSDavid du Colombier 
219a747e4fSDavid du Colombier /* block types */
229a747e4fSDavid du Colombier enum {
239a747e4fSDavid du Colombier 	DirBlock,
249a747e4fSDavid du Colombier 	DataBlock,
259a747e4fSDavid du Colombier 	PointerBlock,
269a747e4fSDavid du Colombier };
279a747e4fSDavid du Colombier 
289a747e4fSDavid du Colombier /* encodings */
299a747e4fSDavid du Colombier enum {
309a747e4fSDavid du Colombier 	NoEnc,
319a747e4fSDavid du Colombier 	DeflateEnc,
329a747e4fSDavid du Colombier };
339a747e4fSDavid du Colombier 
349a747e4fSDavid du Colombier struct PaqHeader
359a747e4fSDavid du Colombier {
369a747e4fSDavid du Colombier 	ulong	magic;
379a747e4fSDavid du Colombier 	ushort	version;
38*fe853e23SDavid du Colombier 	ulong	blocksize;
399a747e4fSDavid du Colombier 	ulong	time;
409a747e4fSDavid du Colombier 	char	label[32];
419a747e4fSDavid du Colombier };
429a747e4fSDavid du Colombier 
439a747e4fSDavid du Colombier struct PaqBlock
449a747e4fSDavid du Colombier {
459a747e4fSDavid du Colombier 	ulong	magic;
46*fe853e23SDavid du Colombier 	ulong	size;		/* data size - always <= blocksize */
479a747e4fSDavid du Colombier 	uchar	type;
489a747e4fSDavid du Colombier 	uchar	encoding;
499a747e4fSDavid du Colombier 	ulong	adler32;	/* applied to unencoded data */
509a747e4fSDavid du Colombier };
519a747e4fSDavid du Colombier 
529a747e4fSDavid du Colombier struct PaqTrailer
539a747e4fSDavid du Colombier {
549a747e4fSDavid du Colombier 	ulong	magic;
559a747e4fSDavid du Colombier 	ulong	root;
569a747e4fSDavid du Colombier 	uchar	sha1[20];
579a747e4fSDavid du Colombier };
589a747e4fSDavid du Colombier 
599a747e4fSDavid du Colombier struct PaqDir
609a747e4fSDavid du Colombier {
619a747e4fSDavid du Colombier 	ulong	qid;
629a747e4fSDavid du Colombier 	ulong	mode;
639a747e4fSDavid du Colombier 	ulong	mtime;
649a747e4fSDavid du Colombier 	ulong	length;
659a747e4fSDavid du Colombier 	ulong	offset;		/* to pointer block */
669a747e4fSDavid du Colombier 	char 	*name;
679a747e4fSDavid du Colombier 	char	*uid;
689a747e4fSDavid du Colombier 	char	*gid;
699a747e4fSDavid du Colombier };
70