shithub: sl

ref: 5ac5ac2d64c4aeed30d6f9a23eaa8dda7d295e47
dir: /tools/lzpack.c/

View raw version
#include "platform.h"
#include "brieflz.h"

static u8int in[256*1024];

int
main(int argc, char **argv)
{
	unsigned long sz;
	int n;

	USED(argc); USED(argv);
	for(sz = 0;; sz += n){
		if((n = read(0, in+sz, sizeof(in)-sz)) < 0)
			abort();
		if(n == 0)
			break;
	}
	if(sz == sizeof(in))
		abort();
	u8int *out = MEM_ALLOC(1+4+blz_max_packed_size(sz));
	if(out == nil)
		abort();
	u8int *w = MEM_ALLOC(blz_workmem_size_level(sz, 10));
	if(w == nil)
		abort();
	unsigned long osz = blz_pack_level(in, out+1+4, sz, w, 10);
	if(osz == BLZ_ERROR)
		abort();
	out[0] = 0;
	out[1] = sz >> 0;
	out[2] = sz >> 8;
	out[3] = sz >> 16;
	out[4] = sz >> 24;
	osz += 1+4;
	if((unsigned long)write(1, out, osz) != osz)
		abort();
	MEM_FREE(w);
	MEM_FREE(out);
	exit(0);
}