]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
cli : better adaptation to small files
authorYann Collet <cyan@fb.com>
Wed, 21 Sep 2016 14:46:08 +0000 (16:46 +0200)
committerYann Collet <cyan@fb.com>
Wed, 21 Sep 2016 14:46:08 +0000 (16:46 +0200)
lib/compress/zstd_compress.c
programs/fileio.c
programs/zstdcli.c

index f5b712fc36d66bf03aaac53849155bd7f1854ec8..856335e52772f27b3bd0ec0d59a1124822a0d4d2 100644 (file)
@@ -2730,7 +2730,7 @@ ZSTD_CDict* ZSTD_createCDict(const void* dict, size_t dictSize, int compressionL
 size_t ZSTD_freeCDict(ZSTD_CDict* cdict)
 {
     if (cdict==NULL) return 0;   /* support free on NULL */
-    {   ZSTD_customMem cMem = cdict->refContext->customMem;
+    {   ZSTD_customMem const cMem = cdict->refContext->customMem;
         ZSTD_freeCCtx(cdict->refContext);
         ZSTD_free(cdict->dictContent, cMem);
         ZSTD_free(cdict, cMem);
index 7dee7c11b41838f0b8261b504f48cecd8ad86797..56f22fe75aa79248eb3caf2736e1822f394d0116 100644 (file)
@@ -255,7 +255,7 @@ typedef struct {
     FILE* srcFile;
 } cRess_t;
 
-static cRess_t FIO_createCResources(const char* dictFileName, int cLevel)
+static cRess_t FIO_createCResources(const char* dictFileName, int cLevel, U64 srcSize)
 {
     cRess_t ress;
     memset(&ress, 0, sizeof(ress));
@@ -272,11 +272,11 @@ static cRess_t FIO_createCResources(const char* dictFileName, int cLevel)
     {   void* dictBuffer;
         size_t const dictBuffSize = FIO_loadFile(&dictBuffer, dictFileName);
         if (dictFileName && (dictBuffer==NULL)) EXM_THROW(32, "zstd: allocation error : can't create dictBuffer");
-        {   ZSTD_parameters params = ZSTD_getParams(cLevel, 0, dictBuffSize);
+        {   ZSTD_parameters params = ZSTD_getParams(cLevel, srcSize, dictBuffSize);
             params.fParams.contentSizeFlag = 1;
             params.fParams.checksumFlag = g_checksumFlag;
             params.fParams.noDictIDFlag = !g_dictIDFlag;
-            {   size_t const errorCode = ZSTD_initCStream_advanced(ress.cctx, dictBuffer, dictBuffSize, params, 0);
+            {   size_t const errorCode = ZSTD_initCStream_advanced(ress.cctx, dictBuffer, dictBuffSize, params, srcSize);
                 if (ZSTD_isError(errorCode)) EXM_THROW(33, "Error initializing CStream : %s", ZSTD_getErrorName(errorCode));
         }   }
         free(dictBuffer);
@@ -408,8 +408,9 @@ int FIO_compressFilename(const char* dstFileName, const char* srcFileName,
                          const char* dictFileName, int compressionLevel)
 {
     clock_t const start = clock();
+    U64 const srcSize = UTIL_getFileSize(srcFileName);
 
-    cRess_t const ress = FIO_createCResources(dictFileName, compressionLevel);
+    cRess_t const ress = FIO_createCResources(dictFileName, compressionLevel, srcSize);
     int const result = FIO_compressFilename_dstFile(ress, dstFileName, srcFileName);
 
     double const seconds = (double)(clock() - start) / CLOCKS_PER_SEC;
@@ -428,7 +429,8 @@ int FIO_compressMultipleFilenames(const char** inFileNamesTable, unsigned nbFile
     size_t dfnSize = FNSPACE;
     char*  dstFileName = (char*)malloc(FNSPACE);
     size_t const suffixSize = suffix ? strlen(suffix) : 0;
-    cRess_t ress = FIO_createCResources(dictFileName, compressionLevel);
+    U64 const srcSize = (nbFiles != 1) ? 0 : UTIL_getFileSize(inFileNamesTable[0]) ;
+    cRess_t ress = FIO_createCResources(dictFileName, compressionLevel, srcSize);
 
     /* init */
     if (dstFileName==NULL) EXM_THROW(27, "FIO_compressMultipleFilenames : allocation error for dstFileName");
index 412870e27dbd515bc4ccb9ae396d68d176935a74..6d1d9f64947ad83dc5a2bf4c3612758582408245 100644 (file)
@@ -505,15 +505,14 @@ int main(int argCount, const char* argv[])
     FIO_setNotificationLevel(displayLevel);
     if (!decode) {
 #ifndef ZSTD_NOCOMPRESS
-        if (filenameIdx==1 && outFileName)
+        if ((filenameIdx==1) && outFileName)
           operationResult = FIO_compressFilename(outFileName, filenameTable[0], dictFileName, cLevel);
         else
           operationResult = FIO_compressMultipleFilenames(filenameTable, filenameIdx, outFileName ? outFileName : ZSTD_EXTENSION, dictFileName, cLevel);
 #else
         DISPLAY("Compression not supported\n");
 #endif
-    } else
-    {  /* decompression */
+    } else {  /* decompression */
 #ifndef ZSTD_NODECOMPRESS
         if (testmode) { outFileName=nulmark; FIO_setRemoveSrcFile(0); } /* test mode */
         if (filenameIdx==1 && outFileName)