154 lines · 4.4 KB · C
RawDownload
/*  * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ typedef struct VacFs VacFs;typedef struct VacDir VacDir;typedef struct VacFile VacFile;typedef struct VacDirEnum VacDirEnum; #pragma incomplete VacFile#pragma incomplete VacDirEnum /* * Mode bits */enum{	ModeOtherExec = (1<<0),			ModeOtherWrite = (1<<1),	ModeOtherRead = (1<<2),	ModeGroupExec = (1<<3),	ModeGroupWrite = (1<<4),	ModeGroupRead = (1<<5),	ModeOwnerExec = (1<<6),	ModeOwnerWrite = (1<<7),	ModeOwnerRead = (1<<8),	ModeSticky = (1<<9),	ModeSetUid = (1<<10),	ModeSetGid = (1<<11),	ModeAppend = (1<<12),		/* append only file */	ModeExclusive = (1<<13),	/* lock file - plan 9 */	ModeLink = (1<<14),		/* sym link */	ModeDir	= (1<<15),		/* duplicate of DirEntry */	ModeHidden = (1<<16),		/* MS-DOS */	ModeSystem = (1<<17),		/* MS-DOS */	ModeArchive = (1<<18),		/* MS-DOS */	ModeTemporary = (1<<19),	/* MS-DOS */	ModeSnapshot = (1<<20),		/* read only snapshot */	ModeDevice = (1<<21),		/* Unix device */	ModeNamedPipe = (1<<22)	/* Unix named pipe */}; enum{	MetaMagic = 0x5656fc79,	MetaHeaderSize = 12,	MetaIndexSize = 4,	IndexEntrySize = 8,	DirMagic = 0x1c4d9072}; enum{	DirPlan9Entry = 1,	/* not valid in version >= 9 */	DirNTEntry,		/* not valid in version >= 9 */	DirQidSpaceEntry,	DirGenEntry		/* not valid in version >= 9 */}; struct VacDir{	char *elem;		/* path element */	ulong entry;		/* entry in directory for data */	ulong gen;		/* generation of data entry */	ulong mentry;		/* entry in directory for meta */	ulong mgen;		/* generation of meta entry */	uvlong size;		/* size of file */	uvlong qid;		/* unique file id */		char *uid;		/* owner id */	char *gid;		/* group id */	char *mid;		/* last modified by */	ulong mtime;		/* last modified time */	ulong mcount;		/* number of modifications: can wrap! */	ulong ctime;		/* directory entry last changed */	ulong atime;		/* last time accessed */	ulong mode;		/* various mode bits */ 	/* plan 9 */	int plan9;	uvlong p9path;	ulong p9version; 	/* sub space of qid */	int qidspace;	uvlong qidoffset;	/* qid offset */	uvlong qidmax;		/* qid maximum */}; struct VacFs{	char	name[128];	uchar	score[VtScoreSize];	VacFile	*root;	VtConn	*z;	int		mode;	int		bsize;	uvlong	qid;	VtCache	*cache;}; VacFs	*vacfsopen(VtConn *z, char *file, int mode, int ncache);VacFs	*vacfsopenscore(VtConn *z, u8int *score, int mode, int ncache);VacFs	*vacfscreate(VtConn *z, int bsize, int ncache);void		vacfsclose(VacFs *fs);int		vacfssync(VacFs *fs);int		vacfssnapshot(VacFs *fs, char *src, char *dst);int		vacfsgetscore(VacFs *fs, u8int *score);int		vacfsgetmaxqid(VacFs*, uvlong*);void		vacfsjumpqid(VacFs*, uvlong); VacFile *vacfsgetroot(VacFs *fs);VacFile	*vacfileopen(VacFs *fs, char *path);VacFile	*vacfilecreate(VacFile *file, char *elem, ulong perm);VacFile	*vacfilewalk(VacFile *file, char *elem);int		vacfileremove(VacFile *file);int		vacfileread(VacFile *file, void *buf, int n, vlong offset);int		vacfileblockscore(VacFile *file, u32int, u8int*);int		vacfilewrite(VacFile *file, void *buf, int n, vlong offset);uvlong	vacfilegetid(VacFile *file);ulong	vacfilegetmcount(VacFile *file);int		vacfileisdir(VacFile *file);int		vacfileisroot(VacFile *file);ulong	vacfilegetmode(VacFile *file);int		vacfilegetsize(VacFile *file, uvlong *size);int		vacfilegetdir(VacFile *file, VacDir *dir);int		vacfilesetdir(VacFile *file, VacDir *dir);VacFile	*vacfilegetparent(VacFile *file);int		vacfileflush(VacFile*, int);VacFile	*vacfileincref(VacFile*);int		vacfiledecref(VacFile*);int		vacfilesetsize(VacFile *f, uvlong size); int		vacfilegetentries(VacFile *f, VtEntry *e, VtEntry *me);int		vacfilesetentries(VacFile *f, VtEntry *e, VtEntry *me); void		vdcleanup(VacDir *dir);void		vdcopy(VacDir *dst, VacDir *src);int		vacfilesetqidspace(VacFile*, u64int, u64int);uvlong	vacfilegetqidoffset(VacFile*); VacDirEnum	*vdeopen(VacFile*);int			vderead(VacDirEnum*, VacDir *);void			vdeclose(VacDirEnum*);int	vdeunread(VacDirEnum*); int	vacfiledsize(VacFile *f);int	sha1matches(VacFile *f, ulong b, uchar *buf, int n);