diff --git a/programs/fileio.c b/programs/fileio.c index 5a8840b5b..16c2cb8fe 100644 --- a/programs/fileio.c +++ b/programs/fileio.c @@ -939,7 +939,7 @@ int FIO_compressFilename(const char* dstFileName, const char* srcFileName, int FIO_compressMultipleFilenames(const char** inFileNamesTable, unsigned nbFiles, - const char* suffix, + const char* outFileName, const char* suffix, const char* dictFileName, int compressionLevel, ZSTD_compressionParameters* comprParams) { @@ -955,16 +955,15 @@ int FIO_compressMultipleFilenames(const char** inFileNamesTable, unsigned nbFile /* init */ if (dstFileName==NULL) EXM_THROW(27, "FIO_compressMultipleFilenames : allocation error for dstFileName"); - if (suffix == NULL) + if (outFileName == NULL && suffix == NULL) EXM_THROW(28, "FIO_compressMultipleFilenames : dst unknown"); /* should never happen */ /* loop on each file */ - if (!strcmp(suffix, stdoutmark)) { + if (outFileName != NULL) { unsigned u; - ress.dstFile = stdout; - SET_BINARY_MODE(stdout); + ress.dstFile = FIO_openDstFile(outFileName); for (u=0; u1)) { - DISPLAY("Too many files (%u) on the command line. \n", filenameIdx); - CLEAN_RETURN(filenameIdx); - } - #ifndef ZSTD_NOCOMPRESS /* check compression level limits */ { int const maxCLevel = ultra ? ZSTD_maxCLevel() : ZSTDCLI_CLEVEL_MAX; @@ -854,7 +848,7 @@ int main(int argCount, const char* argv[]) if ((filenameIdx==1) && outFileName) operationResult = FIO_compressFilename(outFileName, filenameTable[0], dictFileName, cLevel, &compressionParams); else - operationResult = FIO_compressMultipleFilenames(filenameTable, filenameIdx, outFileName ? outFileName : suffix, dictFileName, cLevel, &compressionParams); + operationResult = FIO_compressMultipleFilenames(filenameTable, filenameIdx, outFileName, suffix, dictFileName, cLevel, &compressionParams); #else (void)suffix; DISPLAY("Compression not supported\n"); @@ -872,7 +866,7 @@ int main(int argCount, const char* argv[]) if (filenameIdx==1 && outFileName) operationResult = FIO_decompressFilename(outFileName, filenameTable[0], dictFileName); else - operationResult = FIO_decompressMultipleFilenames(filenameTable, filenameIdx, outFileName ? outFileName : ZSTD_EXTENSION, dictFileName); + operationResult = FIO_decompressMultipleFilenames(filenameTable, filenameIdx, outFileName, dictFileName); #else DISPLAY("Decompression not supported\n"); #endif diff --git a/tests/playTests.sh b/tests/playTests.sh index 402808c0d..773da845b 100755 --- a/tests/playTests.sh +++ b/tests/playTests.sh @@ -173,6 +173,22 @@ rm tmp $ZSTD -f tmp && die "tmp not present : should have failed" test ! -f tmp.zst # tmp.zst should not be created +$ECHO "test : compress multiple files" +$ECHO hello > tmp1 +$ECHO world > tmp2 +$ZSTD tmp1 tmp2 -o "$INTOVOID" +$ZSTD tmp1 tmp2 -c | $ZSTD -t +$ZSTD tmp1 tmp2 -o tmp.zst +test ! -f tmp1.zst +test ! -f tmp2.zst +$ZSTD tmp1 tmp2 +$ZSTD -t tmp1.zst tmp2.zst +$ZSTD -dc tmp1.zst tmp2.zst +$ZSTD tmp1.zst tmp2.zst -o "$INTOVOID" +$ZSTD -d tmp1.zst tmp2.zst -o tmp +rm tmp* + + $ECHO "\n===> Advanced compression parameters " $ECHO "Hello world!" | $ZSTD --zstd=windowLog=21, - -o tmp.zst && die "wrong parameters not detected!"