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