1 typedef struct VacFs VacFs;
2 typedef struct VacDir VacDir;
3 typedef struct VacFile VacFile;
4 typedef struct VacDirEnum VacDirEnum;
6 #pragma incomplete VacFile
7 #pragma incomplete VacDirEnum
14 ModeOtherExec = (1<<0),
15 ModeOtherWrite = (1<<1),
16 ModeOtherRead = (1<<2),
17 ModeGroupExec = (1<<3),
18 ModeGroupWrite = (1<<4),
19 ModeGroupRead = (1<<5),
20 ModeOwnerExec = (1<<6),
21 ModeOwnerWrite = (1<<7),
22 ModeOwnerRead = (1<<8),
26 ModeAppend = (1<<12), /* append only file */
27 ModeExclusive = (1<<13), /* lock file - plan 9 */
28 ModeLink = (1<<14), /* sym link */
29 ModeDir = (1<<15), /* duplicate of DirEntry */
30 ModeHidden = (1<<16), /* MS-DOS */
31 ModeSystem = (1<<17), /* MS-DOS */
32 ModeArchive = (1<<18), /* MS-DOS */
33 ModeTemporary = (1<<19), /* MS-DOS */
34 ModeSnapshot = (1<<20), /* read only snapshot */
35 ModeDevice = (1<<21), /* Unix device */
36 ModeNamedPipe = (1<<22) /* Unix named pipe */
41 MetaMagic = 0x5656fc79,
50 DirPlan9Entry = 1, /* not valid in version >= 9 */
51 DirNTEntry, /* not valid in version >= 9 */
53 DirGenEntry /* not valid in version >= 9 */
58 char *elem; /* path element */
59 ulong entry; /* entry in directory for data */
60 ulong gen; /* generation of data entry */
61 ulong mentry; /* entry in directory for meta */
62 ulong mgen; /* generation of meta entry */
63 uvlong size; /* size of file */
64 uvlong qid; /* unique file id */
66 char *uid; /* owner id */
67 char *gid; /* group id */
68 char *mid; /* last modified by */
69 ulong mtime; /* last modified time */
70 ulong mcount; /* number of modifications: can wrap! */
71 ulong ctime; /* directory entry last changed */
72 ulong atime; /* last time accessed */
73 ulong mode; /* various mode bits */
80 /* sub space of qid */
82 uvlong qidoffset; /* qid offset */
83 uvlong qidmax; /* qid maximum */
89 uchar score[VtScoreSize];
98 VacFs *vacfsopen(VtConn *z, char *file, int mode, int ncache);
99 VacFs *vacfsopenscore(VtConn *z, u8int *score, int mode, int ncache);
100 VacFs *vacfscreate(VtConn *z, int bsize, int ncache);
101 void vacfsclose(VacFs *fs);
102 int vacfssync(VacFs *fs);
103 int vacfssnapshot(VacFs *fs, char *src, char *dst);
104 int vacfsgetscore(VacFs *fs, u8int *score);
105 int vacfsgetmaxqid(VacFs*, uvlong*);
106 void vacfsjumpqid(VacFs*, uvlong);
108 VacFile *vacfsgetroot(VacFs *fs);
109 VacFile *vacfileopen(VacFs *fs, char *path);
110 VacFile *vacfilecreate(VacFile *file, char *elem, ulong perm);
111 VacFile *vacfilewalk(VacFile *file, char *elem);
112 int vacfileremove(VacFile *file);
113 int vacfileread(VacFile *file, void *buf, int n, vlong offset);
114 int vacfileblockscore(VacFile *file, u32int, u8int*);
115 int vacfilewrite(VacFile *file, void *buf, int n, vlong offset);
116 uvlong vacfilegetid(VacFile *file);
117 ulong vacfilegetmcount(VacFile *file);
118 int vacfileisdir(VacFile *file);
119 int vacfileisroot(VacFile *file);
120 ulong vacfilegetmode(VacFile *file);
121 int vacfilegetsize(VacFile *file, uvlong *size);
122 int vacfilegetdir(VacFile *file, VacDir *dir);
123 int vacfilesetdir(VacFile *file, VacDir *dir);
124 VacFile *vacfilegetparent(VacFile *file);
125 int vacfileflush(VacFile*, int);
126 VacFile *vacfileincref(VacFile*);
127 int vacfiledecref(VacFile*);
128 int vacfilesetsize(VacFile *f, uvlong size);
130 int vacfilegetentries(VacFile *f, VtEntry *e, VtEntry *me);
131 int vacfilesetentries(VacFile *f, VtEntry *e, VtEntry *me);
133 void vdcleanup(VacDir *dir);
134 void vdcopy(VacDir *dst, VacDir *src);
135 int vacfilesetqidspace(VacFile*, u64int, u64int);
136 uvlong vacfilegetqidoffset(VacFile*);
138 VacDirEnum *vdeopen(VacFile*);
139 int vderead(VacDirEnum*, VacDir *);
140 void vdeclose(VacDirEnum*);
141 int vdeunread(VacDirEnum*);
143 int vacfiledsize(VacFile *f);
144 int sha1matches(VacFile *f, ulong b, uchar *buf, int n);