Blob


1 typedef struct VacFs VacFs;
2 typedef struct VacDir VacDir;
3 typedef struct VacFile VacFile;
4 typedef struct VacDirEnum VacDirEnum;
6 #ifndef PLAN9PORT
7 #pragma incomplete VacFile
8 #pragma incomplete VacDirEnum
9 #endif
11 /*
12 * Mode bits
13 */
14 enum
15 {
16 ModeOtherExec = (1<<0),
17 ModeOtherWrite = (1<<1),
18 ModeOtherRead = (1<<2),
19 ModeGroupExec = (1<<3),
20 ModeGroupWrite = (1<<4),
21 ModeGroupRead = (1<<5),
22 ModeOwnerExec = (1<<6),
23 ModeOwnerWrite = (1<<7),
24 ModeOwnerRead = (1<<8),
25 ModeSticky = (1<<9),
26 ModeSetUid = (1<<10),
27 ModeSetGid = (1<<11),
28 ModeAppend = (1<<12), /* append only file */
29 ModeExclusive = (1<<13), /* lock file - plan 9 */
30 ModeLink = (1<<14), /* sym link */
31 ModeDir = (1<<15), /* duplicate of DirEntry */
32 ModeHidden = (1<<16), /* MS-DOS */
33 ModeSystem = (1<<17), /* MS-DOS */
34 ModeArchive = (1<<18), /* MS-DOS */
35 ModeTemporary = (1<<19), /* MS-DOS */
36 ModeSnapshot = (1<<20), /* read only snapshot */
37 ModeDevice = (1<<21), /* Unix device */
38 ModeNamedPipe = (1<<22) /* Unix named pipe */
39 };
41 enum
42 {
43 MetaMagic = 0x5656fc79,
44 MetaHeaderSize = 12,
45 MetaIndexSize = 4,
46 IndexEntrySize = 8,
47 DirMagic = 0x1c4d9072
48 };
50 enum
51 {
52 DirPlan9Entry = 1, /* not valid in version >= 9 */
53 DirNTEntry, /* not valid in version >= 9 */
54 DirQidSpaceEntry,
55 DirGenEntry /* not valid in version >= 9 */
56 };
58 struct VacDir
59 {
60 char *elem; /* path element */
61 ulong entry; /* entry in directory for data */
62 ulong gen; /* generation of data entry */
63 ulong mentry; /* entry in directory for meta */
64 ulong mgen; /* generation of meta entry */
65 uvlong size; /* size of file */
66 uvlong qid; /* unique file id */
68 char *uid; /* owner id */
69 char *gid; /* group id */
70 char *mid; /* last modified by */
71 ulong mtime; /* last modified time */
72 ulong mcount; /* number of modifications: can wrap! */
73 ulong ctime; /* directory entry last changed */
74 ulong atime; /* last time accessed */
75 ulong mode; /* various mode bits */
77 /* plan 9 */
78 int plan9;
79 uvlong p9path;
80 ulong p9version;
82 /* sub space of qid */
83 int qidspace;
84 uvlong qidoffset; /* qid offset */
85 uvlong qidmax; /* qid maximum */
86 };
88 struct VacFs
89 {
90 char name[128];
91 uchar score[VtScoreSize];
92 VacFile *root;
93 VtConn *z;
94 int mode;
95 int bsize;
96 uvlong qid;
97 VtCache *cache;
98 };
100 VacFs *vacfsopen(VtConn *z, char *file, int mode, ulong cachemem);
101 VacFs *vacfsopenscore(VtConn *z, u8int *score, int mode, ulong cachemem);
102 VacFs *vacfscreate(VtConn *z, int bsize, ulong cachemem);
103 void vacfsclose(VacFs *fs);
104 int vacfssync(VacFs *fs);
105 int vacfssnapshot(VacFs *fs, char *src, char *dst);
106 int vacfsgetscore(VacFs *fs, u8int *score);
107 int vacfsgetmaxqid(VacFs*, uvlong*);
108 void vacfsjumpqid(VacFs*, uvlong);
110 VacFile *vacfsgetroot(VacFs *fs);
111 VacFile *vacfileopen(VacFs *fs, char *path);
112 VacFile *vacfilecreate(VacFile *file, char *elem, ulong perm);
113 VacFile *vacfilewalk(VacFile *file, char *elem);
114 int vacfileremove(VacFile *file);
115 int vacfileread(VacFile *file, void *buf, int n, vlong offset);
116 int vacfileblockscore(VacFile *file, u32int, u8int*);
117 int vacfilewrite(VacFile *file, void *buf, int n, vlong offset);
118 uvlong vacfilegetid(VacFile *file);
119 ulong vacfilegetmcount(VacFile *file);
120 int vacfileisdir(VacFile *file);
121 int vacfileisroot(VacFile *file);
122 ulong vacfilegetmode(VacFile *file);
123 int vacfilegetsize(VacFile *file, uvlong *size);
124 int vacfilegetdir(VacFile *file, VacDir *dir);
125 int vacfilesetdir(VacFile *file, VacDir *dir);
126 VacFile *vacfilegetparent(VacFile *file);
127 int vacfileflush(VacFile*, int);
128 VacFile *vacfileincref(VacFile*);
129 int vacfiledecref(VacFile*);
130 int vacfilesetsize(VacFile *f, uvlong size);
132 int vacfilegetentries(VacFile *f, VtEntry *e, VtEntry *me);
133 int vacfilesetentries(VacFile *f, VtEntry *e, VtEntry *me);
135 void vdcleanup(VacDir *dir);
136 void vdcopy(VacDir *dst, VacDir *src);
137 int vacfilesetqidspace(VacFile*, u64int, u64int);
138 uvlong vacfilegetqidoffset(VacFile*);
140 VacDirEnum *vdeopen(VacFile*);
141 int vderead(VacDirEnum*, VacDir *);
142 void vdeclose(VacDirEnum*);
143 int vdeunread(VacDirEnum*);
145 int vacfiledsize(VacFile *f);
146 int sha1matches(VacFile *f, ulong b, uchar *buf, int n);