aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/fossil/vac.h
diff options
context:
space:
mode:
authorDavid du Colombier <0intro@gmail.com>2013-09-23 23:00:39 +0200
committerDavid du Colombier <0intro@gmail.com>2013-09-23 23:00:39 +0200
commit6f4d00ee45693290fae042b27536b54f77b96acd (patch)
tree60ad31bf16ed2000661c02345dd2a63851588a5d /src/cmd/fossil/vac.h
parentfea86f063930ea187f1c77e93207ac8d39125520 (diff)
downloadplan9port-6f4d00ee45693290fae042b27536b54f77b96acd.tar.gz
plan9port-6f4d00ee45693290fae042b27536b54f77b96acd.tar.bz2
plan9port-6f4d00ee45693290fae042b27536b54f77b96acd.zip
fossil: import from plan 9
R=rsc https://codereview.appspot.com/7988047
Diffstat (limited to 'src/cmd/fossil/vac.h')
-rw-r--r--src/cmd/fossil/vac.h107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/cmd/fossil/vac.h b/src/cmd/fossil/vac.h
new file mode 100644
index 00000000..bd26c62d
--- /dev/null
+++ b/src/cmd/fossil/vac.h
@@ -0,0 +1,107 @@
+typedef struct DirEntry DirEntry;
+typedef struct MetaBlock MetaBlock;
+typedef struct MetaEntry MetaEntry;
+
+enum {
+ MetaMagic = 0x5656fc7a,
+ MetaHeaderSize = 12,
+ MetaIndexSize = 4,
+ IndexEntrySize = 8,
+ DirMagic = 0x1c4d9072,
+};
+
+/*
+ * 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 */
+};
+
+/* optional directory entry fields */
+enum {
+ DePlan9 = 1, /* not valid in version >= 9 */
+ DeNT, /* not valid in version >= 9 */
+ DeQidSpace,
+ DeGen, /* not valid in version >= 9 */
+};
+
+struct DirEntry {
+ 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 MetaEntry {
+ uchar *p;
+ ushort size;
+};
+
+struct MetaBlock {
+ int maxsize; /* size of block */
+ int size; /* size used */
+ int free; /* free space within used size */
+ int maxindex; /* entries allocated for table */
+ int nindex; /* amount of table used */
+ int botch; /* compensate for my stupidity */
+ uchar *buf;
+};
+
+void deCleanup(DirEntry*);
+void deCopy(DirEntry*, DirEntry*);
+int deSize(DirEntry*);
+void dePack(DirEntry*, MetaEntry*);
+int deUnpack(DirEntry*, MetaEntry*);
+
+void mbInit(MetaBlock*, uchar*, int, int);
+int mbUnpack(MetaBlock*, uchar*, int);
+void mbInsert(MetaBlock*, int, MetaEntry*);
+void mbDelete(MetaBlock*, int);
+void mbPack(MetaBlock*);
+uchar *mbAlloc(MetaBlock*, int);
+int mbResize(MetaBlock*, MetaEntry*, int);
+int mbSearch(MetaBlock*, char*, int*, MetaEntry*);
+
+void meUnpack(MetaEntry*, MetaBlock*, int);