X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/rsbs2/blobdiff_plain/98f1f9afb96af2660ea590c4d32c27e0a7887202..e726b380eaf48b6af8b06fe28383a183f35ceace:/rsb-lz.c diff --git a/rsb-lz.c b/rsb-lz.c index c771b89..bb735d6 100644 --- a/rsb-lz.c +++ b/rsb-lz.c @@ -271,9 +271,8 @@ unsigned int crc_check(unsigned char *buf, unsigned int len, unsigned int magic) return 0; } -void extract_lz_file(unsigned char *inbuf, unsigned char *name, unsigned char check_crc) +unsigned char *extract_lz_file(unsigned char *inbuf, unsigned int *outlen , unsigned char check_crc) { - unsigned int len; unsigned char *outbuf; struct data_in_s data_in; struct data_out_s data_out; @@ -281,23 +280,23 @@ void extract_lz_file(unsigned char *inbuf, unsigned char *name, unsigned char ch if (*((unsigned int*)inbuf) != LZ_MAGIC) err_exit(__func__); - len = *((unsigned int*)(inbuf + 4)); - printf(", length: %d", len); + *outlen = *((unsigned int*)(inbuf + 4)); + printf(", length: %d", *outlen); - if ((outbuf = malloc(len)) == NULL) { + if ((outbuf = malloc(*outlen)) == NULL) { perror("malloc"); exit(1); } - bzero(outbuf, len); + bzero(outbuf, *outlen); data_in.start = inbuf + 8; - data_in.stop = inbuf + len; + data_in.stop = inbuf + *outlen; data_in.byte = 0x00; data_in.bitpos = 0x80; data_out.pos = outbuf; - data_out.end = outbuf + len; + data_out.end = outbuf + *outlen; lz_expand(&data_in, &data_out); @@ -312,7 +311,6 @@ void extract_lz_file(unsigned char *inbuf, unsigned char *name, unsigned char ch err_exit(__func__); } } - write_file(extracted_file((char*)name), outbuf, len); - - free(outbuf); + + return outbuf; }