diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/fossil/vac.h |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/fossil/vac.h')
-rwxr-xr-x | sys/src/cmd/fossil/vac.h | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/sys/src/cmd/fossil/vac.h b/sys/src/cmd/fossil/vac.h new file mode 100755 index 000000000..bd26c62d2 --- /dev/null +++ b/sys/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); |