]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Factor out allocMemory_orDIe(...) in simple_compressionCCtx.c, and amend Makefile...
authorYi Jin <yijinru@gmail.com>
Sun, 16 Dec 2018 23:36:28 +0000 (15:36 -0800)
committerYi Jin <yijinru@gmail.com>
Sun, 16 Dec 2018 23:36:28 +0000 (15:36 -0800)
examples/Makefile
examples/simple_compressionCCtx.c
examples/utils.h

index 7bcbd120b674e472e053a074dcbb4039e312a9ef..7af6176b1745a84817584487629f227ed0b167b4 100644 (file)
@@ -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 \
index d3dd67cc7e325feccb370ceaf6462df1925a3b75..00279e4e6ab5e2baaed50b92ab6917a7bc076c61 100644 (file)
@@ -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 */
index 506cc1ab49828a4a2a1b15834ba3a59aecd5e9f2..2df52be741b6c88fb23a7c0345f000175026c101 100644 (file)
@@ -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);