diff options
| author | rsc <devnull@localhost> | 2003-11-23 17:55:34 +0000 |
|---|---|---|
| committer | rsc <devnull@localhost> | 2003-11-23 17:55:34 +0000 |
| commit | 7763a61a3582ef330bca54f225e8ec5325fbd35e (patch) | |
| tree | 952957eef4d70ecbd30c58e3a0dacd6b3a753a54 /src/cmd/vac/vac.h | |
| parent | 7a4ee46d253e291044bba2d0c54b818b67ac013c (diff) | |
| download | plan9port-7763a61a3582ef330bca54f225e8ec5325fbd35e.tar.gz plan9port-7763a61a3582ef330bca54f225e8ec5325fbd35e.zip | |
start thinking about vac -- doesn't build yet
Diffstat (limited to 'src/cmd/vac/vac.h')
| -rw-r--r-- | src/cmd/vac/vac.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/cmd/vac/vac.h b/src/cmd/vac/vac.h new file mode 100644 index 00000000..549c441c --- /dev/null +++ b/src/cmd/vac/vac.h @@ -0,0 +1,126 @@ +typedef struct VacFS VacFS; +typedef struct VacDir VacDir; +typedef struct VacFile VacFile; +typedef struct VacDirEnum 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 */ +}; + +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 */ +}; + +VacFS *vfsOpen(VtSession *z, char *file, int readOnly, long ncache); +VacFS *vfsCreate(VtSession *z, int bsize, long ncache); +int vfsGetBlockSize(VacFS*); +int vfsIsReadOnly(VacFS*); +VacFile *vfsGetRoot(VacFS*); + +long vfsGetCacheSize(VacFS*); +int vfsSetCacheSize(VacFS*, long); +int vfsSnapshot(VacFS*, char *src, char *dst); +int vfsSync(VacFS*); +int vfsClose(VacFS*); +int vfsGetScore(VacFS*, uchar score[VtScoreSize]); + +/* + * other ideas + * + * VacFS *vfsSnapshot(VacFS*, char *src); + * int vfsGraft(VacFS*, char *name, VacFS*); + */ + +VacFile *vfOpen(VacFS*, char *path); +VacFile *vfCreate(VacFile*, char *elem, ulong perm, char *user); +VacFile *vfWalk(VacFile*, char *elem); +int vfRemove(VacFile*, char*); +int vfRead(VacFile*, void *, int n, vlong offset); +int vfWrite(VacFile*, void *, int n, vlong offset, char *user); +int vfReadPacket(VacFile*, Packet**, vlong offset); +int vfWritePacket(VacFile*, Packet*, vlong offset, char *user); +uvlong vfGetId(VacFile*); +ulong vfGetMcount(VacFile*); +int vfIsDir(VacFile*); +int vfGetBlockScore(VacFile*, ulong bn, uchar score[VtScoreSize]); +int vfGetSize(VacFile*, uvlong *size); +int vfGetDir(VacFile*, VacDir*); +int vfSetDir(VacFile*, VacDir*); +int vfGetVtEntry(VacFile*, VtEntry*); +VacFile *vfGetParent(VacFile*); +int vfSync(VacFile*); +VacFile *vfIncRef(VacFile*); +void vfDecRef(VacFile*); +VacDirEnum *vfDirEnum(VacFile*); +int vfIsRoot(VacFile *vf); + +void vdCleanup(VacDir *dir); +void vdCopy(VacDir *dst, VacDir *src); + +VacDirEnum *vdeOpen(VacFS*, char *path); +int vdeRead(VacDirEnum*, VacDir *, int n); +void vdeFree(VacDirEnum*); + |
