diff --git a/programs/fileio.c b/programs/fileio.c index ee9d060b..7666b072 100644 --- a/programs/fileio.c +++ b/programs/fileio.c @@ -365,7 +365,7 @@ void FIO_setNoProgress(unsigned noProgress) { static int FIO_remove(const char* path) { if (!UTIL_isRegularFile(path)) { - DISPLAYLEVEL(2, "zstd: Refusing to remove non-regular file %s\n", path); + DISPLAYLEVEL(2, "zstd: Refusing to remove non-regular file %s \n", path); return 0; } #if defined(_WIN32) || defined(WIN32) @@ -383,14 +383,14 @@ static FILE* FIO_openSrcFile(const char* srcFileName) { assert(srcFileName != NULL); if (!strcmp (srcFileName, stdinmark)) { - DISPLAYLEVEL(4,"Using stdin for input\n"); + DISPLAYLEVEL(4,"Using stdin for input \n"); SET_BINARY_MODE(stdin); return stdin; } if (!UTIL_fileExist(srcFileName)) { - DISPLAYLEVEL(1, "zstd: %s : No such file or directory (can't stat) -- ignored \n", - srcFileName); + DISPLAYLEVEL(1, "zstd: can't stat %s : %s -- ignored \n", + srcFileName, strerror(errno)); return NULL; } @@ -414,7 +414,7 @@ static FILE* FIO_openDstFile(const char* srcFileName, const char* dstFileName) { assert(dstFileName != NULL); if (!strcmp (dstFileName, stdoutmark)) { - DISPLAYLEVEL(4,"Using stdout for output\n"); + DISPLAYLEVEL(4,"Using stdout for output \n"); SET_BINARY_MODE(stdout); if (g_sparseFileSupport==1) { g_sparseFileSupport = 0; @@ -425,11 +425,12 @@ static FILE* FIO_openDstFile(const char* srcFileName, const char* dstFileName) if (srcFileName != NULL) { stat_t srcStat; stat_t dstStat; - if (UTIL_getFileStat(srcFileName, &srcStat) && UTIL_getFileStat(dstFileName, &dstStat)) { - if (srcStat.st_dev == dstStat.st_dev && srcStat.st_ino == dstStat.st_ino) { - DISPLAYLEVEL(1, "zstd: Refusing to open a output file which will overwrite the input file \n"); - return NULL; - } + if ( UTIL_getFileStat(srcFileName, &srcStat) + && UTIL_getFileStat(dstFileName, &dstStat) + && srcStat.st_dev == dstStat.st_dev + && srcStat.st_ino == dstStat.st_ino ) { + DISPLAYLEVEL(1, "zstd: Refusing to open a output file which will overwrite the input file \n"); + return NULL; } } @@ -438,12 +439,12 @@ static FILE* FIO_openDstFile(const char* srcFileName, const char* dstFileName) } if (UTIL_isRegularFile(dstFileName)) { - FILE* fCheck; - if (!strcmp(dstFileName, nulmark)) { - EXM_THROW(40, "%s is unexpectedly a regular file", dstFileName); - } /* Check if destination file already exists */ - fCheck = fopen( dstFileName, "rb" ); + FILE* const fCheck = fopen( dstFileName, "rb" ); + if (!strcmp(dstFileName, nulmark)) { + EXM_THROW(40, "%s is unexpectedly categorized as a regular file", + dstFileName); + } if (fCheck != NULL) { /* dst file exists, authorization prompt */ fclose(fCheck); if (!g_overwrite) { diff --git a/programs/util.c b/programs/util.c index c8140b7a..4ef988c2 100644 --- a/programs/util.c +++ b/programs/util.c @@ -24,8 +24,12 @@ extern "C" { int UTIL_fileExist(const char* filename) { stat_t statbuf; - int const stat_success = stat(filename, &statbuf); - return !stat_success; +#if defined(_MSC_VER) + int const stat_error = _stat64(filename, &statbuf); +#else + int const stat_error = stat(filename, &statbuf); +#endif + return !stat_error; } int UTIL_isRegularFile(const char* infilename) diff --git a/tests/playTests.sh b/tests/playTests.sh index a86476ab..fc45ef5e 100755 --- a/tests/playTests.sh +++ b/tests/playTests.sh @@ -187,7 +187,7 @@ $ECHO "test: overwrite input file (must fail)" $ZSTD tmp -fo tmp && die "zstd overwrote the input file" $ZSTD tmp.zst -dfo tmp.zst && die "zstd overwrote the input file" $ECHO "test: properly detect input file does not exist" -$ZSTD nothere 2>&1 | grep "o such file" +$ZSTD nothere && die "zstd hasn't detected that input file does not exist" $ECHO "test : file removal" $ZSTD -f --rm tmp