summaryrefslogtreecommitdiffstats
path: root/src/cmd/vac/vac.h
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2003-11-23 17:55:34 +0000
committerrsc <devnull@localhost>2003-11-23 17:55:34 +0000
commit7763a61a3582ef330bca54f225e8ec5325fbd35e (patch)
tree952957eef4d70ecbd30c58e3a0dacd6b3a753a54 /src/cmd/vac/vac.h
parent7a4ee46d253e291044bba2d0c54b818b67ac013c (diff)
downloadplan9port-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.h126
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*);
+