Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
typedef struct VacFs VacFs;
2
typedef struct VacDir VacDir;
3
typedef struct VacFile VacFile;
4
typedef struct VacDirEnum VacDirEnum;
5
 
6
#pragma incomplete VacFile
7
#pragma incomplete VacDirEnum
8
 
9
/*
10
 * Mode bits
11
 */
12
enum
13
{
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),
23
	ModeSticky = (1<<9),
24
	ModeSetUid = (1<<10),
25
	ModeSetGid = (1<<11),
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 */
37
};
38
 
39
enum
40
{
41
	MetaMagic = 0x5656fc79,
42
	MetaHeaderSize = 12,
43
	MetaIndexSize = 4,
44
	IndexEntrySize = 8,
45
	DirMagic = 0x1c4d9072
46
};
47
 
48
enum
49
{
50
	DirPlan9Entry = 1,	/* not valid in version >= 9 */
51
	DirNTEntry,		/* not valid in version >= 9 */
52
	DirQidSpaceEntry,
53
	DirGenEntry		/* not valid in version >= 9 */
54
};
55
 
56
struct VacDir
57
{
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 */
65
 
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 */
74
 
75
	/* plan 9 */
76
	int plan9;
77
	uvlong p9path;
78
	ulong p9version;
79
 
80
	/* sub space of qid */
81
	int qidspace;
82
	uvlong qidoffset;	/* qid offset */
83
	uvlong qidmax;		/* qid maximum */
84
};
85
 
86
struct VacFs
87
{
88
	char	name[128];
89
	uchar	score[VtScoreSize];
90
	VacFile	*root;
91
	VtConn	*z;
92
	int		mode;
93
	int		bsize;
94
	uvlong	qid;
95
	VtCache	*cache;
96
};
97
 
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);
107
 
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);
129
 
130
int		vacfilegetentries(VacFile *f, VtEntry *e, VtEntry *me);
131
int		vacfilesetentries(VacFile *f, VtEntry *e, VtEntry *me);
132
 
133
void		vdcleanup(VacDir *dir);
134
void		vdcopy(VacDir *dst, VacDir *src);
135
int		vacfilesetqidspace(VacFile*, u64int, u64int);
136
uvlong	vacfilegetqidoffset(VacFile*);
137
 
138
VacDirEnum	*vdeopen(VacFile*);
139
int			vderead(VacDirEnum*, VacDir *);
140
void			vdeclose(VacDirEnum*);
141
int	vdeunread(VacDirEnum*);
142
 
143
int	vacfiledsize(VacFile *f);
144
int	sha1matches(VacFile *f, ulong b, uchar *buf, int n);
145