From 95983ed8453f9167077821aea347ba1a87e92eac Mon Sep 17 00:00:00 2001
From: KWSys Upstream <kwrobot@kitware.com>
Date: Mon, 6 Feb 2017 10:00:05 -0500
Subject: KWSys 2017-02-06 (ef673998)

Code extracted from:

    https://gitlab.kitware.com/utils/kwsys.git

at commit ef6739982f686648ef5ae6902aaf5fbaad891bce (master).

Upstream Shortlog
-----------------

Ben Boeckel (1):
      8d8c86b5 testConsoleBuf: tighten the check for the /utf-8 flag

Gregor Jasny (1):
      d6b87625 SystemTools: Add helper function to check for FIFO file type
---
 CMakeLists.txt     |  2 +-
 SystemTools.cxx    | 22 ++++++++++++++++++++++
 SystemTools.hxx.in |  5 +++++
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index d4fe8a7..de68118 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -946,7 +946,7 @@ IF(KWSYS_STANDALONE OR CMake_SOURCE_DIR)
         testConsoleBuf
         )
       IF("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" AND
-         NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.0")
+         CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "19.0.23506")
         set_property(SOURCE testConsoleBuf.cxx testConsoleBufChild.cxx PROPERTY COMPILE_FLAGS /utf-8)
       ENDIF()
       SET_PROPERTY(SOURCE testConsoleBuf.cxx APPEND PROPERTY COMPILE_DEFINITIONS
diff --git a/SystemTools.cxx b/SystemTools.cxx
index 97dd4ae..8c82ec1 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -3067,6 +3067,28 @@ bool SystemTools::FileIsSymlink(const std::string& name)
 #endif
 }
 
+bool SystemTools::FileIsFIFO(const std::string& name)
+{
+#if defined(_WIN32)
+  HANDLE hFile =
+    CreateFileW(Encoding::ToWide(name).c_str(), GENERIC_READ, FILE_SHARE_READ,
+                NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
+  if (hFile == INVALID_HANDLE_VALUE) {
+    return false;
+  }
+  const DWORD type = GetFileType(hFile);
+  CloseHandle(hFile);
+  return type == FILE_TYPE_PIPE;
+#else
+  struct stat fs;
+  if (lstat(name.c_str(), &fs) == 0) {
+    return S_ISFIFO(fs.st_mode);
+  } else {
+    return false;
+  }
+#endif
+}
+
 #if defined(_WIN32) && !defined(__CYGWIN__)
 bool SystemTools::CreateSymlink(const std::string&, const std::string&)
 {
diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in
index f3d06fe..7a5256b 100644
--- a/SystemTools.hxx.in
+++ b/SystemTools.hxx.in
@@ -654,6 +654,11 @@ public:
   static bool FileIsSymlink(const std::string& name);
 
   /**
+   * Return true if the file is a FIFO
+   */
+  static bool FileIsFIFO(const std::string& name);
+
+  /**
    * Return true if the file has a given signature (first set of bytes)
    */
   static bool FileHasSignature(const char* filename, const char* signature,
-- 
cgit v0.12