From accfd80c375d1c313241bbfe18b22ec7f62dcd19 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Mon, 15 Feb 2016 19:33:16 +0100 Subject: [PATCH] Added : option `-t` to test compressed files integrity --- lib/zstd_internal.h | 1 - lib/zstd_static.h | 6 ++++++ programs/fileio.c | 31 ++++++++++++++++++++----------- programs/fileio.h | 1 - programs/zstdcli.c | 12 ++++++++---- 5 files changed, 34 insertions(+), 17 deletions(-) diff --git a/lib/zstd_internal.h b/lib/zstd_internal.h index 318fd55f..26fc8578 100644 --- a/lib/zstd_internal.h +++ b/lib/zstd_internal.h @@ -50,7 +50,6 @@ /*-************************************* * Common constants ***************************************/ -#define ZSTD_MAGICNUMBER 0xFD2FB525 /* v0.5 */ #define ZSTD_DICT_MAGIC 0xEC30A435 #define KB *(1 <<10) diff --git a/lib/zstd_static.h b/lib/zstd_static.h index 258327b1..61216535 100644 --- a/lib/zstd_static.h +++ b/lib/zstd_static.h @@ -48,6 +48,12 @@ extern "C" { #include "mem.h" +/*-************************************* +* Constants +***************************************/ +#define ZSTD_MAGICNUMBER 0xFD2FB525 /* v0.5 */ + + /*-************************************* * Types ***************************************/ diff --git a/programs/fileio.c b/programs/fileio.c index 003e1bd5..e2ad9e84 100644 --- a/programs/fileio.c +++ b/programs/fileio.c @@ -587,7 +587,10 @@ static int FIO_decompressSrcFile(dRess_t ress, const char* srcFileName) continue; } #endif /* ZSTD_LEGACY_SUPPORT */ - + if (MEM_readLE32(ress.srcBuffer) != ZSTD_MAGICNUMBER) { + DISPLAYLEVEL(1, "zstd: %s: not in zstd format \n", srcFileName); + return 1; + } filesize += FIO_decompressFrame(ress, dstFile, srcFile, toRead); } @@ -648,13 +651,24 @@ int FIO_decompressMultipleFilenames(const char** srcNamesTable, unsigned nbFiles if (dstFileName==NULL) EXM_THROW(70, "not enough memory for dstFileName"); ress = FIO_createDResources(dictFileName); - if (suffix) { + if (!strcmp(suffix, stdoutmark) || !strcmp(suffix, nulmark)) { + ress.dstFile = FIO_openDstFile(suffix); + if (ress.dstFile == 0) EXM_THROW(71, "cannot open %s", suffix); + for (u=0; u1)) { + if (outFileName && strcmp(outFileName,stdoutmark) && strcmp(outFileName,nulmark) && (filenameIdx>1)) { DISPLAY("Too many files (%u) on the command line. \n", filenameIdx); return filenameIdx; } @@ -395,12 +399,12 @@ int main(int argCount, const char** argv) if (filenameIdx==1 && outFileName) operationResult = FIO_decompressFilename(outFileName, filenameTable[0], dictFileName); else - operationResult = FIO_decompressMultipleFilenames(filenameTable, filenameIdx, forceStdout ? NULL : ZSTD_EXTENSION, dictFileName); + operationResult = FIO_decompressMultipleFilenames(filenameTable, filenameIdx, outFileName ? outFileName : ZSTD_EXTENSION, dictFileName); } else { /* compression */ if (filenameIdx==1 && outFileName) operationResult = FIO_compressFilename(outFileName, filenameTable[0], dictFileName, cLevel); else - operationResult = FIO_compressMultipleFilenames(filenameTable, filenameIdx, forceStdout ? NULL : ZSTD_EXTENSION, dictFileName, cLevel); + operationResult = FIO_compressMultipleFilenames(filenameTable, filenameIdx, outFileName ? outFileName : ZSTD_EXTENSION, dictFileName, cLevel); } _end: