6 * integer conversion routines
8 #define U8GET(p) ((p)[0])
9 #define U16GET(p) (((p)[0]<<8)|(p)[1])
10 #define U32GET(p) ((u32int)(((p)[0]<<24)|((p)[1]<<16)|((p)[2]<<8)|(p)[3]))
11 #define U48GET(p) (((vlong)U16GET(p)<<32)|(vlong)U32GET((p)+2))
12 #define U64GET(p) (((vlong)U32GET(p)<<32)|(vlong)U32GET((p)+4))
14 #define U8PUT(p,v) (p)[0]=(v)
15 #define U16PUT(p,v) (p)[0]=(v)>>8;(p)[1]=(v)
16 #define U32PUT(p,v) (p)[0]=(v)>>24;(p)[1]=(v)>>16;(p)[2]=(v)>>8;(p)[3]=(v)
17 #define U48PUT(p,v,t32) t32=(v)>>32;U16PUT(p,t32);t32=(v);U32PUT((p)+2,t32)
18 #define U64PUT(p,v,t32) t32=(v)>>32;U32PUT(p,t32);t32=(v);U32PUT((p)+4,t32)
23 if(n < 256 || n > VtMaxLumpSize) {
24 vtSetError("bad block size");
32 vtRootPack(VtRoot *r, uchar *p)
36 U16PUT(p, r->version);
38 memmove(p, r->name, sizeof(r->name));
40 memmove(p, r->type, sizeof(r->type));
42 memmove(p, r->score, VtScoreSize);
44 U16PUT(p, r->blockSize);
46 memmove(p, r->prev, VtScoreSize);
49 assert(p-op == VtRootSize);
53 vtRootUnpack(VtRoot *r, uchar *p)
57 memset(r, 0, sizeof(*r));
59 r->version = U16GET(p);
60 if(r->version != VtRootVersion) {
61 vtSetError("unknown root version");
65 memmove(r->name, p, sizeof(r->name));
66 r->name[sizeof(r->name)-1] = 0;
68 memmove(r->type, p, sizeof(r->type));
69 r->type[sizeof(r->type)-1] = 0;
71 memmove(r->score, p, VtScoreSize);
73 r->blockSize = U16GET(p);
74 if(!checkSize(r->blockSize))
77 memmove(r->prev, p, VtScoreSize);
80 assert(p-op == VtRootSize);
85 vtEntryPack(VtEntry *e, uchar *p, int index)
91 p += index * VtEntrySize;
100 flags = e->flags | ((e->depth << VtEntryDepthShift) & VtEntryDepthMask);
105 U48PUT(p, e->size, t32);
107 memmove(p, e->score, VtScoreSize);
110 assert(p-op == VtEntrySize);
114 vtEntryUnpack(VtEntry *e, uchar *p, int index)
118 p += index * VtEntrySize;
123 e->psize = U16GET(p);
125 e->dsize = U16GET(p);
128 e->depth = (e->flags & VtEntryDepthMask) >> VtEntryDepthShift;
129 e->flags &= ~VtEntryDepthMask;
134 memmove(e->score, p, VtScoreSize);
137 assert(p-op == VtEntrySize);
139 if(!(e->flags & VtEntryActive))
142 if(!checkSize(e->psize) || !checkSize(e->dsize))