implemented --ultra mode protection
This commit is contained in:
+14
-9
@@ -126,6 +126,7 @@
|
|||||||
#define DISPLAY(...) fprintf(stderr, __VA_ARGS__)
|
#define DISPLAY(...) fprintf(stderr, __VA_ARGS__)
|
||||||
#define DISPLAYLEVEL(l, ...) if (g_displayLevel>=l) { DISPLAY(__VA_ARGS__); }
|
#define DISPLAYLEVEL(l, ...) if (g_displayLevel>=l) { DISPLAY(__VA_ARGS__); }
|
||||||
static U32 g_displayLevel = 2; /* 0 : no display; 1: errors; 2 : + result + interaction + warnings; 3 : + progression; 4 : + information */
|
static U32 g_displayLevel = 2; /* 0 : no display; 1: errors; 2 : + result + interaction + warnings; 3 : + progression; 4 : + information */
|
||||||
|
void FIO_setNotificationLevel(unsigned level) { g_displayLevel=level; }
|
||||||
|
|
||||||
#define DISPLAYUPDATE(l, ...) if (g_displayLevel>=l) { \
|
#define DISPLAYUPDATE(l, ...) if (g_displayLevel>=l) { \
|
||||||
if ((FIO_GetMilliSpan(g_time) > refreshRate) || (g_displayLevel>=4)) \
|
if ((FIO_GetMilliSpan(g_time) > refreshRate) || (g_displayLevel>=4)) \
|
||||||
@@ -142,7 +143,8 @@ static clock_t g_time = 0;
|
|||||||
***************************************/
|
***************************************/
|
||||||
static U32 g_overwrite = 0;
|
static U32 g_overwrite = 0;
|
||||||
void FIO_overwriteMode(void) { g_overwrite=1; }
|
void FIO_overwriteMode(void) { g_overwrite=1; }
|
||||||
void FIO_setNotificationLevel(unsigned level) { g_displayLevel=level; }
|
static U32 g_maxWLog = 23;
|
||||||
|
void FIO_setMaxWLog(unsigned maxWLog) { g_maxWLog = maxWLog; }
|
||||||
|
|
||||||
|
|
||||||
/*-*************************************
|
/*-*************************************
|
||||||
@@ -239,10 +241,10 @@ static FILE* FIO_openDstFile(const char* dstFileName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!FIO_loadFile
|
/*! FIO_loadFile() :
|
||||||
* creates a buffer, pointed by *bufferPtr,
|
* creates a buffer, pointed by *bufferPtr,
|
||||||
* loads "filename" content into it
|
* loads `filename` content into it,
|
||||||
* up to MAX_DICT_SIZE bytes
|
* up to MAX_DICT_SIZE bytes
|
||||||
*/
|
*/
|
||||||
static size_t FIO_loadFile(void** bufferPtr, const char* fileName)
|
static size_t FIO_loadFile(void** bufferPtr, const char* fileName)
|
||||||
{
|
{
|
||||||
@@ -274,7 +276,7 @@ static size_t FIO_loadFile(void** bufferPtr, const char* fileName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* **********************************************************************
|
/*-**********************************************************************
|
||||||
* Compression
|
* Compression
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -321,7 +323,7 @@ static void FIO_freeCResources(cRess_t ress)
|
|||||||
|
|
||||||
|
|
||||||
/*! FIO_compressFilename_internal() :
|
/*! FIO_compressFilename_internal() :
|
||||||
* same as FIO_compressFilename_extRess(), with ress.desFile already opened
|
* same as FIO_compressFilename_extRess(), with `ress.desFile` already opened.
|
||||||
* @return : 0 : compression completed correctly,
|
* @return : 0 : compression completed correctly,
|
||||||
* 1 : missing or pb opening srcFileName
|
* 1 : missing or pb opening srcFileName
|
||||||
*/
|
*/
|
||||||
@@ -335,10 +337,13 @@ static int FIO_compressFilename_internal(cRess_t ress,
|
|||||||
U64 compressedfilesize = 0;
|
U64 compressedfilesize = 0;
|
||||||
size_t dictSize = ress.dictBufferSize;
|
size_t dictSize = ress.dictBufferSize;
|
||||||
size_t sizeCheck, errorCode;
|
size_t sizeCheck, errorCode;
|
||||||
|
ZSTD_parameters params;
|
||||||
|
|
||||||
/* init */
|
/* init */
|
||||||
filesize = MAX(FIO_getFileSize(srcFileName),dictSize);
|
filesize = MAX(FIO_getFileSize(srcFileName),dictSize);
|
||||||
errorCode = ZBUFF_compressInit_advanced(ress.ctx, ress.dictBuffer, ress.dictBufferSize, ZSTD_getParams(cLevel, filesize));
|
params = ZSTD_getParams(cLevel, filesize);
|
||||||
|
if (g_maxWLog) if (params.windowLog > g_maxWLog) params.windowLog = g_maxWLog;
|
||||||
|
errorCode = ZBUFF_compressInit_advanced(ress.ctx, ress.dictBuffer, ress.dictBufferSize, params);
|
||||||
if (ZBUFF_isError(errorCode)) EXM_THROW(21, "Error initializing compression : %s", ZBUFF_getErrorName(errorCode));
|
if (ZBUFF_isError(errorCode)) EXM_THROW(21, "Error initializing compression : %s", ZBUFF_getErrorName(errorCode));
|
||||||
|
|
||||||
/* Main compression loop */
|
/* Main compression loop */
|
||||||
@@ -482,7 +487,7 @@ int FIO_compressMultipleFilenames(const char** inFileNamesTable, unsigned nbFile
|
|||||||
ress.dstFile = stdout;
|
ress.dstFile = stdout;
|
||||||
for (u=0; u<nbFiles; u++)
|
for (u=0; u<nbFiles; u++)
|
||||||
missed_files += FIO_compressFilename_srcFile(ress, stdoutmark,
|
missed_files += FIO_compressFilename_srcFile(ress, stdoutmark,
|
||||||
inFileNamesTable[u], compressionLevel);
|
inFileNamesTable[u], compressionLevel);
|
||||||
if (fclose(ress.dstFile)) EXM_THROW(29, "Write error : cannot properly close %s", stdoutmark);
|
if (fclose(ress.dstFile)) EXM_THROW(29, "Write error : cannot properly close %s", stdoutmark);
|
||||||
} else {
|
} else {
|
||||||
for (u=0; u<nbFiles; u++) {
|
for (u=0; u<nbFiles; u++) {
|
||||||
|
|||||||
+4
-3
@@ -41,14 +41,15 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* *************************************
|
/*-*************************************
|
||||||
* Parameters
|
* Parameters
|
||||||
***************************************/
|
***************************************/
|
||||||
void FIO_overwriteMode(void);
|
void FIO_overwriteMode(void);
|
||||||
void FIO_setNotificationLevel(unsigned level);
|
void FIO_setNotificationLevel(unsigned level);
|
||||||
|
void FIO_setMaxWLog(unsigned maxWLog); /**< if `maxWLog` == 0, no max enforced */
|
||||||
|
|
||||||
|
|
||||||
/* *************************************
|
/*-*************************************
|
||||||
* Single File functions
|
* Single File functions
|
||||||
***************************************/
|
***************************************/
|
||||||
/** FIO_compressFilename() :
|
/** FIO_compressFilename() :
|
||||||
@@ -60,7 +61,7 @@ int FIO_compressFilename (const char* outfilename, const char* infilename, const
|
|||||||
int FIO_decompressFilename (const char* outfilename, const char* infilename, const char* dictFileName);
|
int FIO_decompressFilename (const char* outfilename, const char* infilename, const char* dictFileName);
|
||||||
|
|
||||||
|
|
||||||
/* *************************************
|
/*-*************************************
|
||||||
* Multiple File functions
|
* Multiple File functions
|
||||||
***************************************/
|
***************************************/
|
||||||
/** FIO_compressMultipleFilenames() :
|
/** FIO_compressMultipleFilenames() :
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ static int usage_advanced(const char* programName)
|
|||||||
DISPLAY( " -v : verbose mode\n");
|
DISPLAY( " -v : verbose mode\n");
|
||||||
DISPLAY( " -q : suppress warnings; specify twice to suppress errors too\n");
|
DISPLAY( " -q : suppress warnings; specify twice to suppress errors too\n");
|
||||||
DISPLAY( " -c : force write to standard output, even if it is the console\n");
|
DISPLAY( " -c : force write to standard output, even if it is the console\n");
|
||||||
|
DISPLAY( "--ultra : enable ultra modes (requires more memory to decompress)\n");
|
||||||
#ifndef ZSTD_NODICT
|
#ifndef ZSTD_NODICT
|
||||||
DISPLAY( "Dictionary builder :\n");
|
DISPLAY( "Dictionary builder :\n");
|
||||||
DISPLAY( "--train : create a dictionary from a training set of files \n");
|
DISPLAY( "--train : create a dictionary from a training set of files \n");
|
||||||
@@ -219,6 +220,7 @@ int main(int argCount, const char** argv)
|
|||||||
if (!strcmp(argument, "--train")) { dictBuild=1; outFileName=g_defaultDictName; continue; }
|
if (!strcmp(argument, "--train")) { dictBuild=1; outFileName=g_defaultDictName; continue; }
|
||||||
if (!strcmp(argument, "--maxdict")) { nextArgumentIsMaxDict=1; continue; }
|
if (!strcmp(argument, "--maxdict")) { nextArgumentIsMaxDict=1; continue; }
|
||||||
if (!strcmp(argument, "--keep")) { continue; } /* does nothing, since preserving input is default; for gzip/xz compatibility */
|
if (!strcmp(argument, "--keep")) { continue; } /* does nothing, since preserving input is default; for gzip/xz compatibility */
|
||||||
|
if (!strcmp(argument, "--ultra")) { FIO_setMaxWLog(0); continue; }
|
||||||
|
|
||||||
/* '-' means stdin/stdout */
|
/* '-' means stdin/stdout */
|
||||||
if (!strcmp(argument, "-")){
|
if (!strcmp(argument, "-")){
|
||||||
|
|||||||
Reference in New Issue
Block a user