paqfs.h 966 B

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