From eb5c2cc01dbd5756790860ad5eb2302f911d9dc7 Mon Sep 17 00:00:00 2001 From: Steven Fuller Date: Mon, 30 Jul 2001 05:22:12 +0000 Subject: Tools for testing. --- src/tools/dehuff.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/tools/dehuff.c (limited to 'src/tools/dehuff.c') diff --git a/src/tools/dehuff.c b/src/tools/dehuff.c new file mode 100644 index 0000000..d5805b8 --- /dev/null +++ b/src/tools/dehuff.c @@ -0,0 +1,67 @@ +#include +#include +#include + +#include "huffman.hpp" + +#include "util.h" + +int main(int argc, char *argv[]) +{ + FILE *fp; + char str[8]; + unsigned char *buf, *dbuf; + int len; + + if (argc != 3) { + fprintf(stderr, "usage: %s \n", argv[0]); + exit(EXIT_FAILURE); + } + + fp = fopen(argv[1], "rb"); + if (fp == NULL) { + perror("fopen"); + exit(EXIT_FAILURE); + } + + fread(str, 1, 8, fp); + if (strncmp(str, COMPRESSED_RIF_IDENTIFIER, 8) != 0) { + fprintf(stderr, "%s: invalid compressed rif file\n", argv[1]); + exit(EXIT_FAILURE); + } + + len = fsize(argv[1]); + buf = (unsigned char *)malloc(len); + if (buf == NULL) { + fprintf(stderr, "could not allocate %d bytes to load %s\n", len, argv[1]); + exit(EXIT_FAILURE); + } + + fseek(fp, 0, SEEK_SET); + + fread(buf, 1, len, fp); + fclose(fp); + + len = ((HuffmanPackage *)buf)->UncompressedDataSize; + + dbuf = (unsigned char *)HuffmanDecompress((HuffmanPackage *)buf); + if (dbuf == NULL) { + fprintf(stderr, "Something went wrong with HuffmanDecompress\n"); + exit(EXIT_FAILURE); + } + + free(buf); + + fp = fopen(argv[2], "wb"); + if (fp == NULL) { + perror("fopen"); + exit(EXIT_FAILURE); + } + + fwrite(dbuf, 1, len, fp); + fclose(fp); + + free(dbuf); + + return 0; +} -- cgit v1.3