typedef struct PaqHeader PaqHeader; typedef struct PaqBlock PaqBlock; typedef struct PaqTrailer PaqTrailer; typedef struct PaqDir PaqDir; enum { HeaderMagic = 0x529ab12b, HeaderSize = 44, BigHeaderMagic = 0x25a9, BlockMagic = 0x198a1cbf, BlockSize = 12, BigBlockMagic = 0x91a8, TrailerMagic = 0x6b46e688, TrailerSize = 28, Version = 1, MaxBlockSize = 512*1024, MinBlockSize = 512, MinDirSize = 28, }; /* block types */ enum { DirBlock, DataBlock, PointerBlock, }; /* encodings */ enum { NoEnc, DeflateEnc, }; struct PaqHeader { ulong magic; ushort version; ulong blocksize; ulong time; char label[32]; }; struct PaqBlock { ulong magic; ulong size; /* data size - always <= blocksize */ uchar type; uchar encoding; ulong adler32; /* applied to unencoded data */ }; struct PaqTrailer { ulong magic; ulong root; uchar sha1[20]; }; struct PaqDir { ulong qid; ulong mode; ulong mtime; ulong length; ulong offset; /* to pointer block */ char *name; char *uid; char *gid; };