summaryrefslogtreecommitdiff
path: root/module
diff options
context:
space:
mode:
authorforsyth <forsyth@vitanuova.com>2011-05-16 23:28:07 +0100
committerforsyth <forsyth@vitanuova.com>2011-05-16 23:28:07 +0100
commit2b69dba5038ffd0b59cf30a4c44bce549e5097f8 (patch)
tree385d35337b2895a07a2df21bafeb80dd4536e25d /module
parentd728e3107d7ae935bc511e72efc8a0c43fdbf0a0 (diff)
20110516-2327
Diffstat (limited to 'module')
-rw-r--r--module/vac.m63
-rw-r--r--module/venti.m10
2 files changed, 24 insertions, 49 deletions
diff --git a/module/vac.m b/module/vac.m
index e9501cd1..4c8700e6 100644
--- a/module/vac.m
+++ b/module/vac.m
@@ -4,9 +4,6 @@ Vac: module {
dflag: int;
- # taken from venti.m, merge back later
- # some of this needs to be removed from venti.m since it does not belong there
-
# mode bits
Modeperm: con 8r777;
Modesticky,
@@ -24,45 +21,16 @@ Vac: module {
Modedev,
Modenamedpipe: con 1<<(9+iota);
- Entrysize: con 40;
- Rootsize: con 300;
Metablocksize: con 12;
Metaentrysize: con 4;
Dsize: con 8*1024;
- Entryactive: con (1<<0); # entry is in use
- Entrydir: con (1<<1); # a directory
- Entrydepthshift: con 2; # shift for pointer depth
- Entrydepthmask: con (16r7<<2); # mask for pointer depth
- Entrylocal: con (1<<5); # used for local storage: should not be set for venti blocks
-
- Root: adt {
- version: int;
- name: string;
- rtype: string;
- score: Venti->Score; # to a Dir block
- blocksize: int; # maximum block size
- prev: ref Venti->Score; # last root block
-
- new: fn(name, rtype: string, score: Venti->Score, blocksize: int, prev: ref Venti->Score): ref Root;
- unpack: fn(d: array of byte): ref Root;
- pack: fn(r: self ref Root): array of byte;
- };
-
- Entry: adt {
- gen: int; # generation number (XXX should be unsigned)
- psize: int; # pointer block size
- dsize: int; # data block size
- depth: int; # unpacked from flags
- flags: int;
- size: big; # (XXX should be unsigned)
- score: Venti->Score;
-
- new: fn(psize, dsize, flags: int, size: big, score: Venti->Score): ref Entry;
- pack: fn(e: self ref Entry): array of byte;
- unpack: fn(d: array of byte): ref Entry;
- };
+ # DirPlan9, DirNT & DirGen not valid in version >= 9
+ DirPlan9,
+ DirNT,
+ DirQidspace,
+ DirGen: con 1+iota;
Direntry: adt {
version: int;
@@ -72,6 +40,9 @@ Vac: module {
qid: big;
uid, gid, mid: string;
mtime, mcount, ctime, atime, mode, emode: int;
+ qidspace: int;
+ qidoff: big;
+ qidmax: big;
new: fn(): ref Direntry;
mk: fn(d: Sys->Dir): ref Direntry;
@@ -115,7 +86,7 @@ Vac: module {
new: fn(s: ref Venti->Session, dtype, dsize: int): ref File;
write: fn(f: self ref File, d: array of byte): int;
- finish: fn(f: self ref File): ref Entry;
+ finish: fn(f: self ref File): ref Venti->Entry;
};
# for writing venti directories
@@ -125,8 +96,8 @@ Vac: module {
nd, ne: int;
new: fn(s: ref Venti->Session, dsize: int): ref Sink;
- add: fn(m: self ref Sink, e: ref Entry): int;
- finish: fn(m: self ref Sink): ref Entry;
+ add: fn(m: self ref Sink, e: ref Venti->Entry): int;
+ finish: fn(m: self ref Sink): ref Venti->Entry;
};
Mentry: adt {
@@ -145,16 +116,16 @@ Vac: module {
new: fn(s: ref Venti->Session, dsize: int): ref MSink;
add: fn(m: self ref MSink, de: ref Direntry): int;
- finish: fn(m: self ref MSink): ref Entry;
+ finish: fn(m: self ref MSink): ref Venti->Entry;
};
# for reading pages from a hash tree referenced by an entry
Source: adt {
session: ref Venti->Session;
- e: ref Entry;
+ e: ref Venti->Entry;
dsize: int; # real dsize
- new: fn(s: ref Venti->Session, e: ref Entry): ref Source;
+ new: fn(s: ref Venti->Session, e: ref Venti->Entry): ref Source;
get: fn(s: self ref Source, i: big, d: array of byte): int;
};
@@ -164,7 +135,7 @@ Vac: module {
o: big;
mk: fn(s: ref Source): ref Vacfile;
- new: fn(session: ref Venti->Session, e: ref Entry): ref Vacfile;
+ new: fn(session: ref Venti->Session, e: ref Venti->Entry): ref Vacfile;
read: fn(v: self ref Vacfile, d: array of byte, n: int): int;
seek: fn(v: self ref Vacfile, offset: big): big;
pread: fn(v: self ref Vacfile, d: array of byte, n: int, offset: big): int;
@@ -178,9 +149,9 @@ Vac: module {
i: int;
mk: fn(vf: ref Vacfile, ms: ref Source): ref Vacdir;
- new: fn(session: ref Venti->Session, e, me: ref Entry): ref Vacdir;
+ new: fn(session: ref Venti->Session, e, me: ref Venti->Entry): ref Vacdir;
walk: fn(v: self ref Vacdir, elem: string): ref Direntry;
- open: fn(v: self ref Vacdir, de: ref Direntry): (ref Entry, ref Entry);
+ open: fn(v: self ref Vacdir, de: ref Direntry): (ref Venti->Entry, ref Venti->Entry);
readdir: fn(v: self ref Vacdir): (int, ref Direntry);
rewind: fn(v: self ref Vacdir);
};
diff --git a/module/venti.m b/module/venti.m
index 021d436c..440a276d 100644
--- a/module/venti.m
+++ b/module/venti.m
@@ -124,7 +124,10 @@ Venti: module {
rtype: string;
score: Venti->Score; # to a Dir block
blocksize: int; # maximum block size
- prev: Venti->Score; # last root block
+ prev: ref Venti->Score; # last root block
+
+ pack: fn(r: self ref Root): array of byte;
+ unpack: fn(d: array of byte): ref Root;
};
Entry: adt {
@@ -135,6 +138,9 @@ Venti: module {
flags: int;
size: big; # (XXX should be unsigned)
score: Venti->Score;
+
+ pack: fn(e: self ref Entry): array of byte;
+ unpack: fn(d: array of byte): ref Entry;
};
Score: adt {
a: array of byte;
@@ -153,7 +159,5 @@ Venti: module {
sync: fn(s: self ref Session): int;
rpc: fn(s: self ref Session, m: ref Vmsg): (ref Vmsg, string);
};
- unpackentry: fn(d: array of byte): ref Entry;
- unpackroot: fn(d: array of byte): ref Root;
init: fn();
};