1 056fe1ba 2003-11-23 devnull #include <u.h>
2 056fe1ba 2003-11-23 devnull #include <libc.h>
3 056fe1ba 2003-11-23 devnull #include <venti.h>
4 056fe1ba 2003-11-23 devnull #include "cvt.h"
6 056fe1ba 2003-11-23 devnull static int
7 056fe1ba 2003-11-23 devnull checksize(int n)
9 056fe1ba 2003-11-23 devnull if(n < 256 || n > VtMaxLumpSize) {
10 056fe1ba 2003-11-23 devnull werrstr("bad block size");
11 056fe1ba 2003-11-23 devnull return -1;
13 056fe1ba 2003-11-23 devnull return 0;
17 056fe1ba 2003-11-23 devnull vtrootpack(VtRoot *r, uchar *p)
19 056fe1ba 2003-11-23 devnull uchar *op = p;
21 056fe1ba 2003-11-23 devnull U16PUT(p, VtRootVersion);
23 056fe1ba 2003-11-23 devnull memmove(p, r->name, sizeof(r->name));
24 056fe1ba 2003-11-23 devnull p += sizeof(r->name);
25 056fe1ba 2003-11-23 devnull memmove(p, r->type, sizeof(r->type));
26 056fe1ba 2003-11-23 devnull p += sizeof(r->type);
27 056fe1ba 2003-11-23 devnull memmove(p, r->score, VtScoreSize);
28 056fe1ba 2003-11-23 devnull p += VtScoreSize;
29 056fe1ba 2003-11-23 devnull U16PUT(p, r->blocksize);
31 056fe1ba 2003-11-23 devnull memmove(p, r->prev, VtScoreSize);
32 056fe1ba 2003-11-23 devnull p += VtScoreSize;
34 056fe1ba 2003-11-23 devnull assert(p-op == VtRootSize);
38 056fe1ba 2003-11-23 devnull vtrootunpack(VtRoot *r, uchar *p)
40 056fe1ba 2003-11-23 devnull uchar *op = p;
41 056fe1ba 2003-11-23 devnull uint vers;
42 056fe1ba 2003-11-23 devnull memset(r, 0, sizeof(*r));
44 056fe1ba 2003-11-23 devnull vers = U16GET(p);
45 056fe1ba 2003-11-23 devnull if(vers != VtRootVersion) {
46 056fe1ba 2003-11-23 devnull werrstr("unknown root version");
47 0c148046 2004-06-16 devnull return -1;
50 056fe1ba 2003-11-23 devnull memmove(r->name, p, sizeof(r->name));
51 056fe1ba 2003-11-23 devnull r->name[sizeof(r->name)-1] = 0;
52 056fe1ba 2003-11-23 devnull p += sizeof(r->name);
53 056fe1ba 2003-11-23 devnull memmove(r->type, p, sizeof(r->type));
54 056fe1ba 2003-11-23 devnull r->type[sizeof(r->type)-1] = 0;
55 056fe1ba 2003-11-23 devnull p += sizeof(r->type);
56 056fe1ba 2003-11-23 devnull memmove(r->score, p, VtScoreSize);
57 056fe1ba 2003-11-23 devnull p += VtScoreSize;
58 056fe1ba 2003-11-23 devnull r->blocksize = U16GET(p);
59 056fe1ba 2003-11-23 devnull if(checksize(r->blocksize) < 0)
60 056fe1ba 2003-11-23 devnull return -1;
62 056fe1ba 2003-11-23 devnull memmove(r->prev, p, VtScoreSize);
63 056fe1ba 2003-11-23 devnull p += VtScoreSize;
65 056fe1ba 2003-11-23 devnull assert(p-op == VtRootSize);
66 056fe1ba 2003-11-23 devnull return 0;