From: Bimba Shrestha Date: Tue, 22 Oct 2019 22:23:22 +0000 (-0700) Subject: Allowing named pipes to go through zstdcli X-Git-Tag: v1.4.4~1^2~14^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a3974807e5393c9a9ffc857226d00ca0e62c722;p=thirdparty%2Fzstd.git Allowing named pipes to go through zstdcli --- diff --git a/programs/fileio.c b/programs/fileio.c index 8a45563d4..d45e4bbda 100644 --- a/programs/fileio.c +++ b/programs/fileio.c @@ -513,7 +513,7 @@ static FILE* FIO_openSrcFile(const char* srcFileName) return NULL; } - if (!UTIL_isRegularFile(srcFileName)) { + if (!UTIL_isRegularFile(srcFileName) && !UTIL_isFIFO(srcFileName)) { DISPLAYLEVEL(1, "zstd: %s is not a regular file -- ignored \n", srcFileName); return NULL; diff --git a/programs/util.c b/programs/util.c index 3988295d4..5f97b1cde 100644 --- a/programs/util.c +++ b/programs/util.c @@ -115,6 +115,19 @@ int UTIL_isSameFile(const char* file1, const char* file2) #endif } +U32 UTIL_isFIFO(const char* infilename) +{ +/* macro guards, as defined in : https://linux.die.net/man/2/lstat */ +#if PLATFORM_POSIX_VERSION >= 200112L + stat_t statbuf; + int r = UTIL_getFileStat(infilename, &statbuf); + if (!r && S_ISFIFO(statbuf.st_mode)) return 1; +#endif + (void)infilename; + return 0; +} + + U32 UTIL_isLink(const char* infilename) { /* macro guards, as defined in : https://linux.die.net/man/2/lstat */ diff --git a/programs/util.h b/programs/util.h index 0080b63c7..3b15d9471 100644 --- a/programs/util.h +++ b/programs/util.h @@ -135,6 +135,7 @@ U32 UTIL_isDirectory(const char* infilename); int UTIL_getFileStat(const char* infilename, stat_t* statbuf); int UTIL_isSameFile(const char* file1, const char* file2); +U32 UTIL_isFIFO(const char* infilename); U32 UTIL_isLink(const char* infilename); #define UTIL_FILESIZE_UNKNOWN ((U64)(-1)) U64 UTIL_getFileSize(const char* infilename); diff --git a/programs/zstdcli.c b/programs/zstdcli.c index 98df728a9..7a0fa6a25 100644 --- a/programs/zstdcli.c +++ b/programs/zstdcli.c @@ -992,7 +992,7 @@ int main(int argCount, const char* argv[]) if (!followLinks) { unsigned u; for (u=0, fileNamesNb=0; u