vac.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. typedef struct VacFS VacFS;
  2. typedef struct VacDir VacDir;
  3. typedef struct VacFile VacFile;
  4. typedef struct VacDirEnum VacDirEnum;
  5. /*
  6. * Mode bits
  7. */
  8. enum {
  9. ModeOtherExec = (1<<0),
  10. ModeOtherWrite = (1<<1),
  11. ModeOtherRead = (1<<2),
  12. ModeGroupExec = (1<<3),
  13. ModeGroupWrite = (1<<4),
  14. ModeGroupRead = (1<<5),
  15. ModeOwnerExec = (1<<6),
  16. ModeOwnerWrite = (1<<7),
  17. ModeOwnerRead = (1<<8),
  18. ModeSticky = (1<<9),
  19. ModeSetUid = (1<<10),
  20. ModeSetGid = (1<<11),
  21. ModeAppend = (1<<12), /* append only file */
  22. ModeExclusive = (1<<13), /* lock file - plan 9 */
  23. ModeLink = (1<<14), /* sym link */
  24. ModeDir = (1<<15), /* duplicate of DirEntry */
  25. ModeHidden = (1<<16), /* MS-DOS */
  26. ModeSystem = (1<<17), /* MS-DOS */
  27. ModeArchive = (1<<18), /* MS-DOS */
  28. ModeTemporary = (1<<19), /* MS-DOS */
  29. ModeSnapshot = (1<<20), /* read only snapshot */
  30. };
  31. enum {
  32. MetaMagic = 0x5656fc79,
  33. MetaHeaderSize = 12,
  34. MetaIndexSize = 4,
  35. IndexEntrySize = 8,
  36. DirMagic = 0x1c4d9072,
  37. };
  38. enum {
  39. DirPlan9Entry = 1, /* not valid in version >= 9 */
  40. DirNTEntry, /* not valid in version >= 9 */
  41. DirQidSpaceEntry,
  42. DirGenEntry, /* not valid in version >= 9 */
  43. };
  44. struct VacDir {
  45. char *elem; /* path element */
  46. ulong entry; /* entry in directory for data */
  47. ulong gen; /* generation of data entry */
  48. ulong mentry; /* entry in directory for meta */
  49. ulong mgen; /* generation of meta entry */
  50. uvlong size; /* size of file */
  51. uvlong qid; /* unique file id */
  52. char *uid; /* owner id */
  53. char *gid; /* group id */
  54. char *mid; /* last modified by */
  55. ulong mtime; /* last modified time */
  56. ulong mcount; /* number of modifications: can wrap! */
  57. ulong ctime; /* directory entry last changed */
  58. ulong atime; /* last time accessed */
  59. ulong mode; /* various mode bits */
  60. /* plan 9 */
  61. int plan9;
  62. uvlong p9path;
  63. ulong p9version;
  64. /* sub space of qid */
  65. int qidSpace;
  66. uvlong qidOffset; /* qid offset */
  67. uvlong qidMax; /* qid maximum */
  68. };
  69. VacFS *vfsOpen(VtSession *z, char *file, int readOnly, long ncache);
  70. VacFS *vfsCreate(VtSession *z, int bsize, long ncache);
  71. int vfsGetBlockSize(VacFS*);
  72. int vfsIsReadOnly(VacFS*);
  73. VacFile *vfsGetRoot(VacFS*);
  74. long vfsGetCacheSize(VacFS*);
  75. int vfsSetCacheSize(VacFS*, long);
  76. int vfsSnapshot(VacFS*, char *src, char *dst);
  77. int vfsSync(VacFS*);
  78. int vfsClose(VacFS*);
  79. int vfsGetScore(VacFS*, uchar score[VtScoreSize]);
  80. /*
  81. * other ideas
  82. *
  83. * VacFS *vfsSnapshot(VacFS*, char *src);
  84. * int vfsGraft(VacFS*, char *name, VacFS*);
  85. */
  86. VacFile *vfOpen(VacFS*, char *path);
  87. VacFile *vfCreate(VacFile*, char *elem, ulong perm, char *user);
  88. VacFile *vfWalk(VacFile*, char *elem);
  89. int vfRemove(VacFile*, char*);
  90. int vfRead(VacFile*, void *, int n, vlong offset);
  91. int vfWrite(VacFile*, void *, int n, vlong offset, char *user);
  92. int vfReadPacket(VacFile*, Packet**, vlong offset);
  93. int vfWritePacket(VacFile*, Packet*, vlong offset, char *user);
  94. uvlong vfGetId(VacFile*);
  95. ulong vfGetMcount(VacFile*);
  96. int vfIsDir(VacFile*);
  97. int vfGetBlockScore(VacFile*, ulong bn, uchar score[VtScoreSize]);
  98. int vfGetSize(VacFile*, uvlong *size);
  99. int vfGetDir(VacFile*, VacDir*);
  100. int vfSetDir(VacFile*, VacDir*);
  101. int vfGetVtEntry(VacFile*, VtEntry*);
  102. VacFile *vfGetParent(VacFile*);
  103. int vfSync(VacFile*);
  104. VacFile *vfIncRef(VacFile*);
  105. void vfDecRef(VacFile*);
  106. VacDirEnum *vfDirEnum(VacFile*);
  107. int vfIsRoot(VacFile *vf);
  108. void vdCleanup(VacDir *dir);
  109. void vdCopy(VacDir *dst, VacDir *src);
  110. VacDirEnum *vdeOpen(VacFS*, char *path);
  111. int vdeRead(VacDirEnum*, VacDir *, int n);
  112. void vdeFree(VacDirEnum*);