Skip to content

Commit d720558

Browse files
committed
Add Advanced Parameter to CLI to Set Window Fraction
1 parent 705a5b2 commit d720558

File tree

4 files changed

+13
-2
lines changed

4 files changed

+13
-2
lines changed

programs/fileio.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,7 @@ FIO_prefs_t* FIO_createPreferences(void)
308308
ret->allowBlockDevices = 0;
309309
ret->asyncIO = AIO_supported();
310310
ret->passThrough = -1;
311+
ret->windowFrac = 0;
311312
return ret;
312313
}
313314

@@ -427,6 +428,10 @@ void FIO_setLiteralCompressionMode(
427428
prefs->literalCompressionMode = mode;
428429
}
429430

431+
void FIO_setWindowFrac(FIO_prefs_t* const prefs, int windowFrac) {
432+
prefs->windowFrac = windowFrac;
433+
}
434+
430435
void FIO_setAdaptMin(FIO_prefs_t* const prefs, int minCLevel)
431436
{
432437
#ifndef ZSTD_NOCOMPRESS
@@ -1171,6 +1176,7 @@ static cRess_t FIO_createCResources(FIO_prefs_t* const prefs,
11711176
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_c_useRowMatchFinder, prefs->useRowMatchFinder));
11721177
/* compression parameters */
11731178
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_c_windowLog, (int)comprParams.windowLog) );
1179+
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_c_windowFrac, prefs->windowFrac) );
11741180
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_c_chainLog, (int)comprParams.chainLog) );
11751181
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_c_hashLog, (int)comprParams.hashLog) );
11761182
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_c_searchLog, (int)comprParams.searchLog) );

programs/fileio.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ void FIO_setTestMode(FIO_prefs_t* const prefs, int testMode);
9191
void FIO_setLiteralCompressionMode(
9292
FIO_prefs_t* const prefs,
9393
ZSTD_ParamSwitch_e mode);
94+
void FIO_setWindowFrac(FIO_prefs_t* const prefs, int windowFrac);
9495

9596
void FIO_setProgressSetting(FIO_progressSetting_e progressSetting);
9697
void FIO_setNotificationLevel(int level);

programs/fileio_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ typedef struct FIO_prefs_s {
5454
int srcSizeHint;
5555
int testMode;
5656
ZSTD_ParamSwitch_e literalCompressionMode;
57+
int windowFrac;
5758

5859
/* IO preferences */
5960
int removeSrcFile;

programs/zstdcli.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -616,10 +616,11 @@ static unsigned parseAdaptParameters(const char* stringPtr, int* adaptMinPtr, in
616616
* @return 1 means that compression parameters were correct
617617
* @return 0 in case of malformed parameters
618618
*/
619-
static unsigned parseCompressionParameters(const char* stringPtr, ZSTD_compressionParameters* params)
619+
static unsigned parseCompressionParameters(const char* stringPtr, ZSTD_compressionParameters* params, int* windowFrac)
620620
{
621621
for ( ; ;) {
622622
if (longCommandWArg(&stringPtr, "windowLog=") || longCommandWArg(&stringPtr, "wlog=")) { params->windowLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
623+
if (longCommandWArg(&stringPtr, "windowFrac=") || longCommandWArg(&stringPtr, "wfrac=")) { *windowFrac = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
623624
if (longCommandWArg(&stringPtr, "chainLog=") || longCommandWArg(&stringPtr, "clog=")) { params->chainLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
624625
if (longCommandWArg(&stringPtr, "hashLog=") || longCommandWArg(&stringPtr, "hlog=")) { params->hashLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
625626
if (longCommandWArg(&stringPtr, "searchLog=") || longCommandWArg(&stringPtr, "slog=")) { params->searchLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
@@ -878,6 +879,7 @@ int main(int argCount, const char* argv[])
878879
FIO_progressSetting_e progress = FIO_ps_auto;
879880
zstd_operation_mode operation = zom_compress;
880881
ZSTD_compressionParameters compressionParams;
882+
int windowFrac = 0;
881883
int cLevel = init_cLevel();
882884
int cLevelLast = MINCLEVEL - 1; /* lower than minimum */
883885
unsigned recursive = 0;
@@ -1076,7 +1078,7 @@ int main(int argCount, const char* argv[])
10761078
if (longCommandWArg(&argument, "--block-size")) { NEXT_TSIZE(blockSize); continue; }
10771079
if (longCommandWArg(&argument, "--maxdict")) { NEXT_UINT32(maxDictSize); continue; }
10781080
if (longCommandWArg(&argument, "--dictID")) { NEXT_UINT32(dictID); continue; }
1079-
if (longCommandWArg(&argument, "--zstd=")) { if (!parseCompressionParameters(argument, &compressionParams)) { badUsage(programName, originalArgument); CLEAN_RETURN(1); } ; cType = FIO_zstdCompression; continue; }
1081+
if (longCommandWArg(&argument, "--zstd=")) { if (!parseCompressionParameters(argument, &compressionParams, &windowFrac)) { badUsage(programName, originalArgument); CLEAN_RETURN(1); } ; cType = FIO_zstdCompression; continue; }
10801082
if (longCommandWArg(&argument, "--stream-size")) { NEXT_TSIZE(streamSrcSize); continue; }
10811083
if (longCommandWArg(&argument, "--target-compressed-block-size")) { NEXT_TSIZE(targetCBlockSize); continue; }
10821084
if (longCommandWArg(&argument, "--size-hint")) { NEXT_TSIZE(srcSizeHint); continue; }
@@ -1600,6 +1602,7 @@ int main(int argCount, const char* argv[])
16001602
FIO_setSrcSizeHint(prefs, srcSizeHint);
16011603
FIO_setLiteralCompressionMode(prefs, literalCompressionMode);
16021604
FIO_setSparseWrite(prefs, 0);
1605+
FIO_setWindowFrac(prefs, windowFrac);
16031606
if (adaptMin > cLevel) cLevel = adaptMin;
16041607
if (adaptMax < cLevel) cLevel = adaptMax;
16051608

0 commit comments

Comments
 (0)