diff --git a/programs/fileio.c b/programs/fileio.c index a5e9f08c4..2246ed571 100644 --- a/programs/fileio.c +++ b/programs/fileio.c @@ -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 */ diff --git a/programs/legacy/fileio_legacy.c b/programs/legacy/fileio_legacy.c index aa994c36e..d97e3cdca 100644 --- a/programs/legacy/fileio_legacy.c +++ b/programs/legacy/fileio_legacy.c @@ -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); } diff --git a/programs/legacy/fileio_legacy.h b/programs/legacy/fileio_legacy.h index a938433f7..13b3c4a43 100644 --- a/programs/legacy/fileio_legacy.h +++ b/programs/legacy/fileio_legacy.h @@ -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)