paqfs.h 1016 B

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