vac.h 3.5 KB

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