From: Przemyslaw Skibinski Date: Tue, 13 Dec 2016 12:24:59 +0000 (+0100) Subject: fileio.c: support advanced compression parameters X-Git-Tag: v1.1.3^2~54^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8349d675e01faee2e1b33582175f4aaea71342bd;p=thirdparty%2Fzstd.git fileio.c: support advanced compression parameters --- diff --git a/programs/fileio.c b/programs/fileio.c index a493e97c5..597422ae8 100644 --- a/programs/fileio.c +++ b/programs/fileio.c @@ -247,7 +247,8 @@ typedef struct { FILE* srcFile; } cRess_t; -static cRess_t FIO_createCResources(const char* dictFileName, int cLevel, U64 srcSize) +static cRess_t FIO_createCResources(const char* dictFileName, int cLevel, + U64 srcSize, ZSTD_compressionParameters* comprParams) { cRess_t ress; memset(&ress, 0, sizeof(ress)); @@ -268,6 +269,13 @@ static cRess_t FIO_createCResources(const char* dictFileName, int cLevel, U64 sr params.fParams.contentSizeFlag = 1; params.fParams.checksumFlag = g_checksumFlag; params.fParams.noDictIDFlag = !g_dictIDFlag; + if (comprParams->windowLog) params.cParams.windowLog = comprParams->windowLog; + if (comprParams->chainLog) params.cParams.chainLog = comprParams->chainLog; + if (comprParams->hashLog) params.cParams.hashLog = comprParams->hashLog; + if (comprParams->searchLog) params.cParams.searchLog = comprParams->searchLog; + if (comprParams->searchLength) params.cParams.searchLength = comprParams->searchLength; + if (comprParams->targetLength) params.cParams.targetLength = comprParams->targetLength; + if (comprParams->strategy) params.cParams.strategy = comprParams->strategy; { 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)); } } @@ -401,12 +409,12 @@ static int FIO_compressFilename_dstFile(cRess_t ress, int FIO_compressFilename(const char* dstFileName, const char* srcFileName, - const char* dictFileName, int compressionLevel) + const char* dictFileName, int compressionLevel, ZSTD_compressionParameters* comprParams) { clock_t const start = clock(); U64 const srcSize = UTIL_getFileSize(srcFileName); - cRess_t const ress = FIO_createCResources(dictFileName, compressionLevel, srcSize); + cRess_t const ress = FIO_createCResources(dictFileName, compressionLevel, srcSize, comprParams); int const result = FIO_compressFilename_dstFile(ress, dstFileName, srcFileName); double const seconds = (double)(clock() - start) / CLOCKS_PER_SEC; @@ -419,14 +427,15 @@ int FIO_compressFilename(const char* dstFileName, const char* srcFileName, int FIO_compressMultipleFilenames(const char** inFileNamesTable, unsigned nbFiles, const char* suffix, - const char* dictFileName, int compressionLevel) + const char* dictFileName, int compressionLevel, + ZSTD_compressionParameters* comprParams) { int missed_files = 0; size_t dfnSize = FNSPACE; char* dstFileName = (char*)malloc(FNSPACE); size_t const suffixSize = suffix ? strlen(suffix) : 0; U64 const srcSize = (nbFiles != 1) ? 0 : UTIL_getFileSize(inFileNamesTable[0]) ; - cRess_t ress = FIO_createCResources(dictFileName, compressionLevel, srcSize); + cRess_t ress = FIO_createCResources(dictFileName, compressionLevel, srcSize, comprParams); /* init */ if (dstFileName==NULL) EXM_THROW(27, "FIO_compressMultipleFilenames : allocation error for dstFileName"); diff --git a/programs/fileio.h b/programs/fileio.h index 06e0be372..b71658334 100644 --- a/programs/fileio.h +++ b/programs/fileio.h @@ -11,6 +11,9 @@ #ifndef FILEIO_H_23981798732 #define FILEIO_H_23981798732 +#define ZSTD_STATIC_LINKING_ONLY /* ZSTD_compressionParameters */ +#include "zstd.h" /* ZSTD_compressionParameters */ + #if defined (__cplusplus) extern "C" { #endif @@ -44,7 +47,8 @@ void FIO_setMemLimit(unsigned memLimit); ***************************************/ /** FIO_compressFilename() : @return : 0 == ok; 1 == pb with src file. */ -int FIO_compressFilename (const char* outfilename, const char* infilename, const char* dictFileName, int compressionLevel); +int FIO_compressFilename (const char* outfilename, const char* infilename, const char* dictFileName, + int compressionLevel, ZSTD_compressionParameters* comprParams); /** FIO_decompressFilename() : @return : 0 == ok; 1 == pb with src file. */ @@ -58,7 +62,8 @@ int FIO_decompressFilename (const char* outfilename, const char* infilename, con @return : nb of missing files */ int FIO_compressMultipleFilenames(const char** srcNamesTable, unsigned nbFiles, const char* suffix, - const char* dictFileName, int compressionLevel); + const char* dictFileName, int compressionLevel, + ZSTD_compressionParameters* comprParams); /** FIO_decompressMultipleFilenames() : @return : nb of missing or skipped files */ diff --git a/programs/zstdcli.c b/programs/zstdcli.c index fb873a867..f2a6c71f7 100644 --- a/programs/zstdcli.c +++ b/programs/zstdcli.c @@ -569,9 +569,9 @@ int main(int argCount, const char* argv[]) if (operation==zom_compress) { #ifndef ZSTD_NOCOMPRESS if ((filenameIdx==1) && outFileName) - operationResult = FIO_compressFilename(outFileName, filenameTable[0], dictFileName, cLevel); + operationResult = FIO_compressFilename(outFileName, filenameTable[0], dictFileName, cLevel, &compressionParams); else - operationResult = FIO_compressMultipleFilenames(filenameTable, filenameIdx, outFileName ? outFileName : ZSTD_EXTENSION, dictFileName, cLevel); + operationResult = FIO_compressMultipleFilenames(filenameTable, filenameIdx, outFileName ? outFileName : ZSTD_EXTENSION, dictFileName, cLevel, &compressionParams); #else DISPLAY("Compression not supported\n"); #endif