From adbb83845c5d3cb02343d7613cfb8385aa909909 Mon Sep 17 00:00:00 2001 From: rsc Date: Tue, 18 Jan 2005 05:25:09 +0000 Subject: remove venti for now --- src/cmd/venti/unwhack.c | 179 ------------------------------------------------ 1 file changed, 179 deletions(-) delete mode 100644 src/cmd/venti/unwhack.c (limited to 'src/cmd/venti/unwhack.c') diff --git a/src/cmd/venti/unwhack.c b/src/cmd/venti/unwhack.c deleted file mode 100644 index 5530bd07..00000000 --- a/src/cmd/venti/unwhack.c +++ /dev/null @@ -1,179 +0,0 @@ -#include "stdinc.h" -#include "whack.h" - -enum -{ - DMaxFastLen = 7, - DBigLenCode = 0x3c, /* minimum code for large lenth encoding */ - DBigLenBits = 6, - DBigLenBase = 1 /* starting items to encode for big lens */ -}; - -static uchar lenval[1 << (DBigLenBits - 1)] = -{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, - 5, - 6, - 255, - 255 -}; - -static uchar lenbits[] = -{ - 0, 0, 0, - 2, 3, 5, 5, -}; - -static uchar offbits[16] = -{ - 5, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 12, 13 -}; - -static ushort offbase[16] = -{ - 0, 0x20, - 0x40, 0x60, - 0x80, 0xc0, - 0x100, 0x180, - 0x200, 0x300, - 0x400, 0x600, - 0x800, 0xc00, - 0x1000, - 0x2000 -}; - -void -unwhackinit(Unwhack *uw) -{ - uw->err[0] = '\0'; -} - -int -unwhack(Unwhack *uw, uchar *dst, int ndst, uchar *src, int nsrc) -{ - uchar *s, *d, *dmax, *smax, lit; - ulong uwbits, lithist; - int i, off, len, bits, use, code, uwnbits, overbits; - - d = dst; - dmax = d + ndst; - - smax = src + nsrc; - uwnbits = 0; - uwbits = 0; - overbits = 0; - lithist = ~0; - while(src < smax || uwnbits - overbits >= MinDecode){ - while(uwnbits <= 24){ - uwbits <<= 8; - if(src < smax) - uwbits |= *src++; - else - overbits += 8; - uwnbits += 8; - } - - /* - * literal - */ - len = lenval[(uwbits >> (uwnbits - 5)) & 0x1f]; - if(len == 0){ - if(lithist & 0xf){ - uwnbits -= 9; - lit = (uwbits >> uwnbits) & 0xff; - lit &= 255; - }else{ - uwnbits -= 8; - lit = (uwbits >> uwnbits) & 0x7f; - if(lit < 32){ - if(lit < 24){ - uwnbits -= 2; - lit = (lit << 2) | ((uwbits >> uwnbits) & 3); - }else{ - uwnbits -= 3; - lit = (lit << 3) | ((uwbits >> uwnbits) & 7); - } - lit = (lit - 64) & 0xff; - } - } - if(d >= dmax){ - snprint(uw->err, WhackErrLen, "too much output"); - return -1; - } - *d++ = lit; - lithist = (lithist << 1) | (lit < 32) | (lit > 127); - continue; - } - - /* - * length - */ - if(len < 255) - uwnbits -= lenbits[len]; - else{ - uwnbits -= DBigLenBits; - code = ((uwbits >> uwnbits) & ((1 << DBigLenBits) - 1)) - DBigLenCode; - len = DMaxFastLen; - use = DBigLenBase; - bits = (DBigLenBits & 1) ^ 1; - while(code >= use){ - len += use; - code -= use; - code <<= 1; - uwnbits--; - if(uwnbits < 0){ - snprint(uw->err, WhackErrLen, "len out of range"); - return -1; - } - code |= (uwbits >> uwnbits) & 1; - use <<= bits; - bits ^= 1; - } - len += code; - - while(uwnbits <= 24){ - uwbits <<= 8; - if(src < smax) - uwbits |= *src++; - else - overbits += 8; - uwnbits += 8; - } - } - - /* - * offset - */ - uwnbits -= 4; - bits = (uwbits >> uwnbits) & 0xf; - off = offbase[bits]; - bits = offbits[bits]; - - uwnbits -= bits; - off |= (uwbits >> uwnbits) & ((1 << bits) - 1); - off++; - - if(off > d - dst){ - snprint(uw->err, WhackErrLen, "offset out of range: off=%d d=%ld len=%d nbits=%d", off, d - dst, len, uwnbits); - return -1; - } - if(d + len > dmax){ - snprint(uw->err, WhackErrLen, "len out of range"); - return -1; - } - s = d - off; - for(i = 0; i < len; i++) - d[i] = s[i]; - d += len; - } - if(uwnbits < overbits){ - snprint(uw->err, WhackErrLen, "compressed data overrun"); - return -1; - } - - len = d - dst; - - return len; -} -- cgit v1.2.3