From: Yi Jin Date: Sun, 16 Dec 2018 23:36:28 +0000 (-0800) Subject: Factor out allocMemory_orDIe(...) in simple_compressionCCtx.c, and amend Makefile... X-Git-Tag: v1.3.8~24^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cce0842c607de31320a4fd37c1218fd40ac9b011;p=thirdparty%2Fzstd.git Factor out allocMemory_orDIe(...) in simple_compressionCCtx.c, and amend Makefile to account for dependency on utils.h --- diff --git a/examples/Makefile b/examples/Makefile index 7bcbd120b..7af6176b1 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -25,32 +25,32 @@ all: simple_compression simple_decompression \ $(LIB) : $(MAKE) -C ../lib libzstd.a -simple_compression : simple_compression.c $(LIB) - $(CC) $(CPPFLAGS) $(CFLAGS) $^ $(LDFLAGS) -o $@ +simple_compression : simple_compression.c utils.h $(LIB) + $(CC) $(CPPFLAGS) $(CFLAGS) $< $(LIB) $(LDFLAGS) -o $@ -simple_decompression : simple_decompression.c $(LIB) - $(CC) $(CPPFLAGS) $(CFLAGS) $^ $(LDFLAGS) -o $@ +simple_decompression : simple_decompression.c utils.h $(LIB) + $(CC) $(CPPFLAGS) $(CFLAGS) $< $(LIB) $(LDFLAGS) -o $@ -simple_compressionCCtx : simple_compressionCCtx.c $(LIB) - $(CC) $(CPPFLAGS) $(CFLAGS) $^ $(LDFLAGS) -o $@ +simple_compressionCCtx : simple_compressionCCtx.c utils.h $(LIB) + $(CC) $(CPPFLAGS) $(CFLAGS) $< $(LIB) $(LDFLAGS) -o $@ -dictionary_compression : dictionary_compression.c $(LIB) - $(CC) $(CPPFLAGS) $(CFLAGS) $^ $(LDFLAGS) -o $@ +dictionary_compression : dictionary_compression.c utils.h $(LIB) + $(CC) $(CPPFLAGS) $(CFLAGS) $< $(LIB) $(LDFLAGS) -o $@ -dictionary_decompression : dictionary_decompression.c $(LIB) - $(CC) $(CPPFLAGS) $(CFLAGS) $^ $(LDFLAGS) -o $@ +dictionary_decompression : dictionary_decompression.c utils.h $(LIB) + $(CC) $(CPPFLAGS) $(CFLAGS) $< $(LIB) $(LDFLAGS) -o $@ -streaming_compression : streaming_compression.c $(LIB) - $(CC) $(CPPFLAGS) $(CFLAGS) $^ $(LDFLAGS) -o $@ +streaming_compression : streaming_compression.c utils.h $(LIB) + $(CC) $(CPPFLAGS) $(CFLAGS) $< $(LIB) $(LDFLAGS) -o $@ -multiple_streaming_compression : multiple_streaming_compression.c $(LIB) - $(CC) $(CPPFLAGS) $(CFLAGS) $^ $(LDFLAGS) -o $@ +multiple_streaming_compression : multiple_streaming_compression.c utils.h $(LIB) + $(CC) $(CPPFLAGS) $(CFLAGS) $< $(LIB) $(LDFLAGS) -o $@ -streaming_decompression : streaming_decompression.c $(LIB) - $(CC) $(CPPFLAGS) $(CFLAGS) $^ $(LDFLAGS) -o $@ +streaming_decompression : streaming_decompression.c utils.h $(LIB) + $(CC) $(CPPFLAGS) $(CFLAGS) $< $(LIB) $(LDFLAGS) -o $@ streaming_memory_usage : streaming_memory_usage.c $(LIB) - $(CC) $(CPPFLAGS) $(CFLAGS) $^ $(LDFLAGS) -o $@ + $(CC) $(CPPFLAGS) $(CFLAGS) $< $(LIB) $(LDFLAGS) -o $@ clean: @rm -f core *.o tmp* result* *.zst \ diff --git a/examples/simple_compressionCCtx.c b/examples/simple_compressionCCtx.c index d3dd67cc7..00279e4e6 100644 --- a/examples/simple_compressionCCtx.c +++ b/examples/simple_compressionCCtx.c @@ -23,7 +23,7 @@ static void compressExpress_orDie(const char* fname, const char* oname, size_t fSize; loadFile_orDie(fname, &fSize, fBuff, fBuffSize); - size_t const cSize = ZSTD_compressCCtx(cctx, cBuff, cBuffSize, fBuff, fBuffSize, 1); + size_t const cSize = ZSTD_compressCCtx(cctx, cBuff, cBuffSize, fBuff, fSize, 1); if (ZSTD_isError(cSize)) { fprintf(stderr, "error compressing %s : %s \n", fname, ZSTD_getErrorName(cSize)); exit(8); @@ -42,6 +42,32 @@ static void getOutFilename(const char* const filename, char* const outFilename) strcat(outFilename, ".zst"); } +/* allocate memory for buffers big enough to compress all files + * as well as memory for output file names (outFileName) + */ +void allocMemory_orDie(int argc, const char** argv, char** outFilename, + void** cBuffer, size_t* cBufferSize, void** fBuffer, size_t* fBufferSize) { + size_t maxFilenameLength=0; + size_t maxFileSize = 0; + + int argNb; + for (argNb = 1; argNb < argc; argNb++) { + const char* const filename = argv[argNb]; + size_t const filenameLength = strlen(filename); + size_t const fileSize = fsize_orDie(filename); + + if (filenameLength > maxFilenameLength) maxFilenameLength = filenameLength; + if (fileSize > maxFileSize) maxFileSize = fileSize; + } + *cBufferSize = ZSTD_compressBound(maxFileSize); + *fBufferSize = maxFileSize; + + /* allocate memory for output file name, input/output buffers for all compression tasks */ + *outFilename = (char*)malloc_orDie(maxFilenameLength + 5); + *cBuffer = malloc_orDie(*cBufferSize); + *fBuffer = malloc_orDie(*fBufferSize); +} + int main(int argc, const char** argv) { const char* const exeName = argv[0]; @@ -53,36 +79,28 @@ int main(int argc, const char** argv) return 1; } - /* pre-calculate buffer sizes needed to handle all files */ - size_t maxFileNameLength=0; - size_t maxFileSize = 0; - size_t maxCBufferSize = 0; - - int argNb; - for (argNb = 1; argNb < argc; argNb++) { - const char* const fileName = argv[argNb]; - size_t const fileNameLength = strlen(fileName); - size_t const fileSize = fsize_orDie(fileName); - - if (fileNameLength > maxFileNameLength) maxFileNameLength = fileNameLength; - if (fileSize > maxFileSize) maxFileSize = fileSize; - } - maxCBufferSize = ZSTD_compressBound(maxFileSize); - - /* allocate memory for output file name, input/output buffers for all compression tasks */ - char* const outFilename = (char*)malloc_orDie(maxFileNameLength + 5); - void* const fBuffer = malloc_orDie(maxFileSize); - void* const cBuffer = malloc_orDie(maxCBufferSize); + /* allocate memory for buffers big enough to compress all files + * as well as memory for output file name (outFileName) + * fBuffer - buffer for input file data + * cBuffer - buffer for compressed data + */ + char* outFilename; + void* fBuffer; + void* cBuffer; + size_t fBufferSize; + size_t cBufferSize; + allocMemory_orDie(argc, argv, &outFilename, &cBuffer, &cBufferSize, &fBuffer, &fBufferSize); /* create a compression context (ZSTD_CCtx) for all compression tasks */ ZSTD_CCtx* const cctx = ZSTD_createCCtx(); if (cctx==NULL) { fprintf(stderr, "ZSTD_createCCtx() error \n"); exit(10); } /* compress files with shared context, input and output buffers */ + int argNb; for (argNb = 1; argNb < argc; argNb++) { const char* const inFilename = argv[argNb]; getOutFilename(inFilename, outFilename); - compressExpress_orDie(inFilename, outFilename, cctx, cBuffer, maxCBufferSize, fBuffer, maxFileSize); + compressExpress_orDie(inFilename, outFilename, cctx, cBuffer, cBufferSize, fBuffer, fBufferSize); } /* free momery resources */ diff --git a/examples/utils.h b/examples/utils.h index 506cc1ab4..2df52be74 100644 --- a/examples/utils.h +++ b/examples/utils.h @@ -51,8 +51,8 @@ static size_t fsize_orDie(const char *filename) off_t const fileSize = st.st_size; size_t const size = (size_t)fileSize; - /* if off_t -> size_t conversion causes discrepancy, the file size is - * too big for at least 1 type to handle + /* if off_t -> size_t type conversion results in discrepancy, + * the file size is too big for at least one type to handle. */ if (size != fileSize) { /* narrowcast overflow */ fprintf(stderr, "%s : filesize too large \n", filename);