plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

vac.h (4108B)


      1 typedef struct VacFs VacFs;
      2 typedef struct VacDir VacDir;
      3 typedef struct VacFile VacFile;
      4 typedef struct VacDirEnum VacDirEnum;
      5 
      6 #ifndef PLAN9PORT
      7 #pragma incomplete VacFile
      8 #pragma incomplete VacDirEnum
      9 #endif
     10 
     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 };
     40 
     41 enum
     42 {
     43 	MetaMagic = 0x5656fc79,
     44 	MetaHeaderSize = 12,
     45 	MetaIndexSize = 4,
     46 	IndexEntrySize = 8,
     47 	DirMagic = 0x1c4d9072
     48 };
     49 
     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 };
     57 
     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 */
     67 
     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 */
     76 
     77 	/* plan 9 */
     78 	int plan9;
     79 	uvlong p9path;
     80 	ulong p9version;
     81 
     82 	/* sub space of qid */
     83 	int qidspace;
     84 	uvlong qidoffset;	/* qid offset */
     85 	uvlong qidmax;		/* qid maximum */
     86 };
     87 
     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 };
     99 
    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);
    109 
    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);
    131 
    132 int		vacfilegetentries(VacFile *f, VtEntry *e, VtEntry *me);
    133 int		vacfilesetentries(VacFile *f, VtEntry *e, VtEntry *me);
    134 
    135 void		vdcleanup(VacDir *dir);
    136 void		vdcopy(VacDir *dst, VacDir *src);
    137 int		vacfilesetqidspace(VacFile*, u64int, u64int);
    138 uvlong	vacfilegetqidoffset(VacFile*);
    139 
    140 VacDirEnum	*vdeopen(VacFile*);
    141 int			vderead(VacDirEnum*, VacDir *);
    142 void			vdeclose(VacDirEnum*);
    143 int	vdeunread(VacDirEnum*);
    144 
    145 int	vacfiledsize(VacFile *f);
    146 int	sha1matches(VacFile *f, ulong b, uchar *buf, int n);