diff options
author | Yann Collet <Cyan4973@users.noreply.github.com> | 2023-03-06 17:42:26 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-06 17:42:26 (GMT) |
commit | 61d226567ea403cd3bc01dd3b30b0ab1505380a8 (patch) | |
tree | 9e244058b5aa39cb933f291ece3b160402a7868e /programs | |
parent | 80dfdce2821faab75acb3e45c808c1444129eccb (diff) | |
parent | a51521916d5cdf8930405f4cf3c0ff9c4d5b6a6c (diff) | |
download | lz4-61d226567ea403cd3bc01dd3b30b0ab1505380a8.zip lz4-61d226567ea403cd3bc01dd3b30b0ab1505380a8.tar.gz lz4-61d226567ea403cd3bc01dd3b30b0ab1505380a8.tar.bz2 |
Merge pull request #1212 from lz4/cdir
refuse to compress directories
Diffstat (limited to 'programs')
-rw-r--r-- | programs/lz4io.c | 33 | ||||
-rw-r--r-- | programs/util.h | 21 |
2 files changed, 30 insertions, 24 deletions
diff --git a/programs/lz4io.c b/programs/lz4io.c index 8b70b91..dcdf6af 100644 --- a/programs/lz4io.c +++ b/programs/lz4io.c @@ -325,11 +325,16 @@ static FILE* LZ4IO_openSrcFile(const char* srcFileName) DISPLAYLEVEL(4,"Using stdin for input \n"); f = stdin; SET_BINARY_MODE(stdin); - } else { - f = fopen(srcFileName, "rb"); - if (f==NULL) DISPLAYLEVEL(1, "%s: %s \n", srcFileName, strerror(errno)); + return f; + } + + if (UTIL_isDirectory(srcFileName)) { + DISPLAYLEVEL(1, "lz4: %s is a directory -- ignored \n", srcFileName); + return NULL; } + f = fopen(srcFileName, "rb"); + if (f==NULL) DISPLAYLEVEL(1, "%s: %s \n", srcFileName, strerror(errno)); return f; } @@ -337,7 +342,8 @@ static FILE* LZ4IO_openSrcFile(const char* srcFileName) * prefs is writable, because sparseFileSupport might be updated. * condition : `dstFileName` must be non-NULL. * @result : FILE* to `dstFileName`, or NULL if it fails */ -static FILE* LZ4IO_openDstFile(const char* dstFileName, const LZ4IO_prefs_t* const prefs) +static FILE* +LZ4IO_openDstFile(const char* dstFileName, const LZ4IO_prefs_t* const prefs) { FILE* f; assert(dstFileName != NULL); @@ -381,7 +387,6 @@ static FILE* LZ4IO_openDstFile(const char* dstFileName, const LZ4IO_prefs_t* con } - /*************************************** * Legacy Compression ***************************************/ @@ -409,8 +414,10 @@ static int LZ4IO_LZ4_compress(const char* src, char* dst, int srcSize, int dstSi /* LZ4IO_compressFilename_Legacy : * This function is intentionally "hidden" (not published in .h) * It generates compressed streams using the old 'legacy' format */ -int LZ4IO_compressFilename_Legacy(const char* input_filename, const char* output_filename, - int compressionlevel, const LZ4IO_prefs_t* prefs) +int LZ4IO_compressFilename_Legacy(const char* input_filename, + const char* output_filename, + int compressionlevel, + const LZ4IO_prefs_t* prefs) { typedef int (*compress_f)(const char* src, char* dst, int srcSize, int dstSize, int cLevel); compress_f const compressionFunction = (compressionlevel < 3) ? LZ4IO_LZ4_compress : LZ4_compress_HC; @@ -563,11 +570,14 @@ static void* LZ4IO_createDict(size_t* dictSize, const char* const dictFilename) char* dictBuf; FILE* dictFile; - if (!circularBuf) END_PROCESS(25, "Allocation error : not enough memory for circular buffer"); - if (!dictFilename) END_PROCESS(26, "Dictionary error : no filename provided"); + if (!dictFilename) + END_PROCESS(26, "Dictionary error : no filename provided"); + if (!circularBuf) + END_PROCESS(25, "Allocation error : not enough memory for circular buffer"); dictFile = LZ4IO_openSrcFile(dictFilename); - if (!dictFile) END_PROCESS(27, "Dictionary error : could not open dictionary file"); + if (!dictFile) + END_PROCESS(27, "Dictionary error : could not open dictionary file"); /* opportunistically seek to the part of the file we care about. * If this fails it's not a problem since we'll just read everything anyways. */ @@ -1311,7 +1321,8 @@ LZ4IO_decompressSrcFile(dRess_t ress, static int LZ4IO_decompressDstFile(dRess_t ress, - const char* input_filename, const char* output_filename, + const char* input_filename, + const char* output_filename, const LZ4IO_prefs_t* const prefs) { int result; diff --git a/programs/util.h b/programs/util.h index 3192ddc..4861049 100644 --- a/programs/util.h +++ b/programs/util.h @@ -195,13 +195,10 @@ UTIL_STATIC void* UTIL_realloc(void* ptr, size_t size) /*-**************************************** * String functions ******************************************/ -/* - * A modified version of realloc(). - * If UTIL_realloc() fails the original block is freed. -*/ +/* supports a==NULL or b==NULL */ UTIL_STATIC int UTIL_sameString(const char* a, const char* b) { - assert(a!=NULL && b!=NULL); /* unsupported scenario */ + assert(a != NULL || b != NULL); /* unsupported scenario */ if (a==NULL) return 0; if (b==NULL) return 0; return !strcmp(a,b); @@ -412,7 +409,6 @@ UTIL_STATIC int UTIL_getFileStat(const char* infilename, stat_t *statbuf) return 1; } - UTIL_STATIC int UTIL_isRegFD(int fd) { stat_t statbuf; @@ -423,26 +419,25 @@ UTIL_STATIC int UTIL_isRegFD(int fd) return UTIL_getFDStat(fd, &statbuf); /* Only need to know whether it is a regular file */ } - UTIL_STATIC int UTIL_isRegFile(const char* infilename) { stat_t statbuf; return UTIL_getFileStat(infilename, &statbuf); /* Only need to know whether it is a regular file */ } - -UTIL_STATIC U32 UTIL_isDirectory(const char* infilename) +UTIL_STATIC int UTIL_isDirectory(const char* infilename) { - int r; stat_t statbuf; + int r; #if defined(_MSC_VER) r = _stat64(infilename, &statbuf); - if (!r && (statbuf.st_mode & _S_IFDIR)) return 1; + if (r) return 0; + return (statbuf.st_mode & S_IFDIR); #else r = stat(infilename, &statbuf); - if (!r && S_ISDIR(statbuf.st_mode)) return 1; + if (r) return 0; + return (S_ISDIR(statbuf.st_mode)); #endif - return 0; } |