Blame


1 6f4d00ee 2013-09-23 0intro typedef struct DirEntry DirEntry;
2 6f4d00ee 2013-09-23 0intro typedef struct MetaBlock MetaBlock;
3 6f4d00ee 2013-09-23 0intro typedef struct MetaEntry MetaEntry;
4 6f4d00ee 2013-09-23 0intro
5 6f4d00ee 2013-09-23 0intro enum {
6 6f4d00ee 2013-09-23 0intro MetaMagic = 0x5656fc7a,
7 6f4d00ee 2013-09-23 0intro MetaHeaderSize = 12,
8 6f4d00ee 2013-09-23 0intro MetaIndexSize = 4,
9 6f4d00ee 2013-09-23 0intro IndexEntrySize = 8,
10 6f4d00ee 2013-09-23 0intro DirMagic = 0x1c4d9072,
11 6f4d00ee 2013-09-23 0intro };
12 6f4d00ee 2013-09-23 0intro
13 6f4d00ee 2013-09-23 0intro /*
14 6f4d00ee 2013-09-23 0intro * Mode bits
15 6f4d00ee 2013-09-23 0intro */
16 6f4d00ee 2013-09-23 0intro enum {
17 6f4d00ee 2013-09-23 0intro ModeOtherExec = (1<<0),
18 6f4d00ee 2013-09-23 0intro ModeOtherWrite = (1<<1),
19 6f4d00ee 2013-09-23 0intro ModeOtherRead = (1<<2),
20 6f4d00ee 2013-09-23 0intro ModeGroupExec = (1<<3),
21 6f4d00ee 2013-09-23 0intro ModeGroupWrite = (1<<4),
22 6f4d00ee 2013-09-23 0intro ModeGroupRead = (1<<5),
23 6f4d00ee 2013-09-23 0intro ModeOwnerExec = (1<<6),
24 6f4d00ee 2013-09-23 0intro ModeOwnerWrite = (1<<7),
25 6f4d00ee 2013-09-23 0intro ModeOwnerRead = (1<<8),
26 6f4d00ee 2013-09-23 0intro ModeSticky = (1<<9),
27 6f4d00ee 2013-09-23 0intro ModeSetUid = (1<<10),
28 6f4d00ee 2013-09-23 0intro ModeSetGid = (1<<11),
29 6f4d00ee 2013-09-23 0intro ModeAppend = (1<<12), /* append only file */
30 6f4d00ee 2013-09-23 0intro ModeExclusive = (1<<13), /* lock file - plan 9 */
31 6f4d00ee 2013-09-23 0intro ModeLink = (1<<14), /* sym link */
32 6f4d00ee 2013-09-23 0intro ModeDir = (1<<15), /* duplicate of DirEntry */
33 6f4d00ee 2013-09-23 0intro ModeHidden = (1<<16), /* MS-DOS */
34 6f4d00ee 2013-09-23 0intro ModeSystem = (1<<17), /* MS-DOS */
35 6f4d00ee 2013-09-23 0intro ModeArchive = (1<<18), /* MS-DOS */
36 6f4d00ee 2013-09-23 0intro ModeTemporary = (1<<19), /* MS-DOS */
37 6f4d00ee 2013-09-23 0intro ModeSnapshot = (1<<20), /* read only snapshot */
38 6f4d00ee 2013-09-23 0intro };
39 6f4d00ee 2013-09-23 0intro
40 6f4d00ee 2013-09-23 0intro /* optional directory entry fields */
41 6f4d00ee 2013-09-23 0intro enum {
42 6f4d00ee 2013-09-23 0intro DePlan9 = 1, /* not valid in version >= 9 */
43 6f4d00ee 2013-09-23 0intro DeNT, /* not valid in version >= 9 */
44 6f4d00ee 2013-09-23 0intro DeQidSpace,
45 6f4d00ee 2013-09-23 0intro DeGen, /* not valid in version >= 9 */
46 6f4d00ee 2013-09-23 0intro };
47 6f4d00ee 2013-09-23 0intro
48 6f4d00ee 2013-09-23 0intro struct DirEntry {
49 6f4d00ee 2013-09-23 0intro char *elem; /* path element */
50 6f4d00ee 2013-09-23 0intro ulong entry; /* entry in directory for data */
51 6f4d00ee 2013-09-23 0intro ulong gen; /* generation of data entry */
52 6f4d00ee 2013-09-23 0intro ulong mentry; /* entry in directory for meta */
53 6f4d00ee 2013-09-23 0intro ulong mgen; /* generation of meta entry */
54 6f4d00ee 2013-09-23 0intro uvlong size; /* size of file */
55 6f4d00ee 2013-09-23 0intro uvlong qid; /* unique file id */
56 6f4d00ee 2013-09-23 0intro
57 6f4d00ee 2013-09-23 0intro char *uid; /* owner id */
58 6f4d00ee 2013-09-23 0intro char *gid; /* group id */
59 6f4d00ee 2013-09-23 0intro char *mid; /* last modified by */
60 6f4d00ee 2013-09-23 0intro ulong mtime; /* last modified time */
61 6f4d00ee 2013-09-23 0intro ulong mcount; /* number of modifications: can wrap! */
62 6f4d00ee 2013-09-23 0intro ulong ctime; /* directory entry last changed */
63 6f4d00ee 2013-09-23 0intro ulong atime; /* last time accessed */
64 6f4d00ee 2013-09-23 0intro ulong mode; /* various mode bits */
65 6f4d00ee 2013-09-23 0intro
66 6f4d00ee 2013-09-23 0intro /* plan 9 */
67 6f4d00ee 2013-09-23 0intro int plan9;
68 6f4d00ee 2013-09-23 0intro uvlong p9path;
69 6f4d00ee 2013-09-23 0intro ulong p9version;
70 6f4d00ee 2013-09-23 0intro
71 6f4d00ee 2013-09-23 0intro /* sub space of qid */
72 6f4d00ee 2013-09-23 0intro int qidSpace;
73 6f4d00ee 2013-09-23 0intro uvlong qidOffset; /* qid offset */
74 6f4d00ee 2013-09-23 0intro uvlong qidMax; /* qid maximum */
75 6f4d00ee 2013-09-23 0intro };
76 6f4d00ee 2013-09-23 0intro
77 6f4d00ee 2013-09-23 0intro struct MetaEntry {
78 6f4d00ee 2013-09-23 0intro uchar *p;
79 6f4d00ee 2013-09-23 0intro ushort size;
80 6f4d00ee 2013-09-23 0intro };
81 6f4d00ee 2013-09-23 0intro
82 6f4d00ee 2013-09-23 0intro struct MetaBlock {
83 6f4d00ee 2013-09-23 0intro int maxsize; /* size of block */
84 6f4d00ee 2013-09-23 0intro int size; /* size used */
85 6f4d00ee 2013-09-23 0intro int free; /* free space within used size */
86 6f4d00ee 2013-09-23 0intro int maxindex; /* entries allocated for table */
87 6f4d00ee 2013-09-23 0intro int nindex; /* amount of table used */
88 6f4d00ee 2013-09-23 0intro int botch; /* compensate for my stupidity */
89 6f4d00ee 2013-09-23 0intro uchar *buf;
90 6f4d00ee 2013-09-23 0intro };
91 6f4d00ee 2013-09-23 0intro
92 6f4d00ee 2013-09-23 0intro void deCleanup(DirEntry*);
93 6f4d00ee 2013-09-23 0intro void deCopy(DirEntry*, DirEntry*);
94 6f4d00ee 2013-09-23 0intro int deSize(DirEntry*);
95 6f4d00ee 2013-09-23 0intro void dePack(DirEntry*, MetaEntry*);
96 6f4d00ee 2013-09-23 0intro int deUnpack(DirEntry*, MetaEntry*);
97 6f4d00ee 2013-09-23 0intro
98 6f4d00ee 2013-09-23 0intro void mbInit(MetaBlock*, uchar*, int, int);
99 6f4d00ee 2013-09-23 0intro int mbUnpack(MetaBlock*, uchar*, int);
100 6f4d00ee 2013-09-23 0intro void mbInsert(MetaBlock*, int, MetaEntry*);
101 6f4d00ee 2013-09-23 0intro void mbDelete(MetaBlock*, int);
102 6f4d00ee 2013-09-23 0intro void mbPack(MetaBlock*);
103 6f4d00ee 2013-09-23 0intro uchar *mbAlloc(MetaBlock*, int);
104 6f4d00ee 2013-09-23 0intro int mbResize(MetaBlock*, MetaEntry*, int);
105 6f4d00ee 2013-09-23 0intro int mbSearch(MetaBlock*, char*, int*, MetaEntry*);
106 6f4d00ee 2013-09-23 0intro
107 6f4d00ee 2013-09-23 0intro void meUnpack(MetaEntry*, MetaBlock*, int);