]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Allowing named pipes to go through zstdcli
authorBimba Shrestha <bimbashrestha@fb.com>
Tue, 22 Oct 2019 22:23:22 +0000 (15:23 -0700)
committerBimba Shrestha <bimbashrestha@fb.com>
Tue, 22 Oct 2019 22:23:22 +0000 (15:23 -0700)
programs/fileio.c
programs/util.c
programs/util.h
programs/zstdcli.c

index 8a45563d437961d9e4a91d6c19d21b066a1e9a2d..d45e4bbda1f90092af9b9d8756091b94efd4ec76 100644 (file)
@@ -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;
index 3988295d45bb1bab7d2378734247ac6957833e6d..5f97b1cde1d4e7d294493d25a34f0194f97173e1 100644 (file)
@@ -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 */
index 0080b63c7a152b8eeb7ae7df5b7d0d18852b6c82..3b15d9471ec2c6477649d881aa7f43aa4b1f8b4c 100644 (file)
@@ -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);
index 98df728a98b5d8aa507cedfe715169ace3bccf16..7a0fa6a25589eaad5020c26b2a3df52398685528 100644 (file)
@@ -992,7 +992,7 @@ int main(int argCount, const char* argv[])
     if (!followLinks) {
         unsigned u;
         for (u=0, fileNamesNb=0; u<filenameIdx; u++) {
-            if (UTIL_isLink(filenameTable[u])) {
+            if (UTIL_isLink(filenameTable[u]) && !UTIL_isFIFO(filenameTable[u])) {
                 DISPLAYLEVEL(2, "Warning : %s is a symbolic link, ignoring\n", filenameTable[u]);
             } else {
                 filenameTable[fileNamesNb++] = filenameTable[u];