ref: dbb6fc6e19e87ac2e212637c1061d3af619d4f94
parent: 9cf49c3aa370070c2c386ce5c91299579ea5a962
author: Noam Preil <noam@pixelhero.dev>
date: Wed Nov 29 04:57:43 EST 2023
clean up whack code
--- a/main.c
+++ b/main.c
@@ -561,11 +561,8 @@
vtreadarena(arena, addr, buf, &size);
size = U16GET(buf+7);
if(buf[29] == 2){
- // Needs decompression
- Unwhack uw;
- unwhackinit(&uw);
- if(unwhack(&uw, dst, size, buf+38, U16GET(buf+5)) != size)
- sysfatal("decompression failed: %s", uw.err);
+ if(unwhack(dst, size, buf+38, U16GET(buf+5)) != size)
+ sysfatal("decompression failed: %r");
} else if(buf[29] == 1)
memcpy(dst, buf+38, size);
free(buf);
--- a/unwhack.c
+++ b/unwhack.c
@@ -45,14 +45,8 @@
0x2000
};
-void
-unwhackinit(Unwhack *uw)
-{
- uw->err[0] = '\0';
-}
-
int
-unwhack(Unwhack *uw, uchar *dst, int ndst, uchar *src, int nsrc)
+unwhack(uchar *dst, u16int ndst, uchar *src, u16int nsrc)
{
uchar *s, *d, *dmax, *smax, lit;
ulong uwbits, lithist;
@@ -100,7 +94,7 @@
}
}
if(d >= dmax){
- snprint(uw->err, WhackErrLen, "too much output");
+ werrstr("%s", "too much output");
return -1;
}
*d++ = lit;
@@ -125,7 +119,7 @@
code <<= 1;
uwnbits--;
if(uwnbits < 0){
- snprint(uw->err, WhackErrLen, "len out of range");
+ werrstr("%s", "len out of range");
return -1;
}
code |= (uwbits >> uwnbits) & 1;
@@ -157,12 +151,12 @@
off++;
if(off > d - dst){
- snprint(uw->err, WhackErrLen, "offset out of range: off=%d d=%zd len=%d nbits=%d",
+ werrstr("offset out of range: off=%d d=%zd len=%d nbits=%d",
off, d - dst, len, uwnbits);
return -1;
}
if(d + len > dmax){
- snprint(uw->err, WhackErrLen, "len out of range");
+ werrstr("%s", "len out of range");
return -1;
}
s = d - off;
@@ -171,7 +165,7 @@
d += len;
}
if(uwnbits < overbits){
- snprint(uw->err, WhackErrLen, "compressed data overrun");
+ werrstr("%s", "compressed data overrun");
return -1;
}
--- a/whack.h
+++ b/whack.h
@@ -1,10 +1,6 @@
-typedef struct Whack Whack;
-typedef struct Unwhack Unwhack;
-
enum
{
WhackStats = 8,
- WhackErrLen = 64, /* max length of error message from thwack or unthwack */
WhackMaxOff = 16*1024, /* max allowed offset */
HashLog = 14,
@@ -17,24 +13,6 @@
MaxSeqMask = 8, /* number of bits in coding block mask */
MaxSeqStart = 256 /* max offset of initial coding block */
-};
+};
-struct Whack
-{
- ushort begin; /* time of first byte in hash */
- ushort hash[HashSize];
- ushort next[WhackMaxOff];
- uchar *data;
-};
-
-struct Unwhack
-{
- char err[WhackErrLen];
-};
-
-void whackinit(Whack*, int level);
-void unwhackinit(Unwhack*);
-int whack(Whack*, uchar *dst, uchar *src, int nsrc, ulong stats[WhackStats]);
-int unwhack(Unwhack*, uchar *dst, int ndst, uchar *src, int nsrc);
-
-int whackblock(uchar *dst, uchar *src, int ssize);
+int unwhack(uchar *dst, u16int dsize, uchar *src, u16int ssize);
--
⑨