shithub: neoventi

Download patch

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);
--