6 fmtzbinit(Fmt *f, ZBlock *b)
8 memset(f, 0, sizeof *f);
10 fmtlocaleinit(f, nil, nil, nil);
14 f->stop = (char*)f->start + b->len;
17 #define ROUNDUP(p, n) ((void*)(((uintptr)(p)+(n)-1)&~(uintptr)((n)-1)))
22 static char zmagic[] = "1234567890abcdefghijklmnopqrstuvxyz";
25 alloczblock(u32int size, int zeroed, uint blocksize)
33 blocksize = 32; /* try for cache line alignment */
35 n = size+OverflowCheck+sizeof(ZBlock)+blocksize+8;
38 seterr(EOk, "out of memory");
42 data = ROUNDUP(p, blocksize);
43 b = ROUNDUP(data+size+OverflowCheck, 8);
44 if(0) fprint(2, "alloc %p-%p data %p-%p b %p-%p\n",
45 p, p+n, data, data+size, b, b+1);
52 memset(b->data, 0, size);
53 memmove(b->data+size, zmagic, OverflowCheck);
61 if(memcmp(b->data+b->_size, zmagic, OverflowCheck) != 0)
63 memset(b->data+b->_size, 0, OverflowCheck);
69 packet2zblock(Packet *p, u32int size)
75 b = alloczblock(size, 0, 0);
78 if(packetcopy(p, b->data, 0, size) < 0){
86 zblock2packet(ZBlock *zb, u32int size)
93 packetappend(p, zb->data, size);