]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
CLI supports dictionary decompression in legacy mode v0.5.x
authorYann Collet <yann.collet.73@gmail.com>
Sun, 8 May 2016 06:11:24 +0000 (08:11 +0200)
committerYann Collet <yann.collet.73@gmail.com>
Sun, 8 May 2016 06:11:24 +0000 (08:11 +0200)
programs/fileio.c
programs/legacy/fileio_legacy.c
programs/legacy/fileio_legacy.h

index a5e9f08c443b53abd1808528001a1cdb9012815c..2246ed571356f1475316eebbb22d67200a5afef0 100644 (file)
@@ -598,7 +598,7 @@ static int FIO_decompressSrcFile(dRess_t ress, const char* srcFileName)
         {   U32 const magic = MEM_readLE32(ress.srcBuffer);
 #if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1)
             if (ZSTD_isLegacy(magic)) {
-                filesize += FIO_decompressLegacyFrame(dstFile, srcFile, magic);
+                filesize += FIO_decompressLegacyFrame(dstFile, srcFile, ress.dictBuffer, ress.dstBufferSize, magic);
                 continue;
             }
 #endif   /* ZSTD_LEGACY_SUPPORT */
index aa994c36ec87976e14ffa7dff6c54863c50bc538..d97e3cdca0dbdf22a5a8c0c5b1bbf90bbb0eb209 100644 (file)
@@ -405,7 +405,7 @@ typedef struct {
     size_t srcBufferSize;
     void*  dstBuffer;
     size_t dstBufferSize;
-    void*  dictBuffer;
+    const void*  dictBuffer;
     size_t dictBufferSize;
     ZBUFFv05_DCtx* dctx;
 } dRessv05_t;
@@ -435,7 +435,6 @@ static void FIOv05_freeDResources(dRessv05_t ress)
     if (ZBUFFv05_isError(errorCode)) EXM_THROW(69, "Error : can't free ZBUFF context resource : %s", ZBUFFv05_getErrorName(errorCode));
     free(ress.srcBuffer);
     free(ress.dstBuffer);
-    free(ress.dictBuffer);
 }
 
 
@@ -476,7 +475,9 @@ unsigned long long FIOv05_decompressFrame(dRessv05_t ress,
 
 /*=====   General legacy dispatcher   =====*/
 
-unsigned long long FIO_decompressLegacyFrame(FILE* foutput, FILE* finput, U32 magicNumberLE)
+unsigned long long FIO_decompressLegacyFrame(FILE* foutput, FILE* finput,
+                                             const void* dictBuffer, size_t dictSize,
+                                             U32 magicNumberLE)
 {
        switch(magicNumberLE)
        {
@@ -494,10 +495,12 @@ unsigned long long FIO_decompressLegacyFrame(FILE* foutput, FILE* finput, U32 ma
                    }
                case ZSTDv05_MAGICNUMBER :
                    {   dRessv05_t r = FIOv05_createDResources();
-                unsigned long long const s = FIOv05_decompressFrame(r, foutput, finput);
-                FIOv05_freeDResources(r);
-                return s;
-                   }
+                r.dictBuffer = dictBuffer;
+                r.dictBufferSize = dictSize;
+                {   unsigned long long const s = FIOv05_decompressFrame(r, foutput, finput);
+                    FIOv05_freeDResources(r);
+                    return s;
+                   }   }
                default :
                    return ERROR(prefix_unknown);
        }
index a938433f735cfd57a9d868f9471bf19f3141a5e7..13b3c4a43dc96a5aaf034c210cdf4767301e4049 100644 (file)
@@ -38,7 +38,9 @@ void FIO_legacy_setNotificationLevel(unsigned level);
 /* *************************************
 *  Stream/File functions
 ***************************************/
-unsigned long long FIO_decompressLegacyFrame(FILE* foutput, FILE* finput, U32 magicNumberLE);
+unsigned long long FIO_decompressLegacyFrame(FILE* foutput, FILE* finput,
+                                             const void* dictBuffer, size_t dictSize,
+                                             U32 magicNumberLE);
 
 
 #if defined (__cplusplus)