Commit d6b87625 authored by Gregor Jasny's avatar Gregor Jasny Committed by Brad King

SystemTools: Add helper function to check for FIFO file type

Issue: cmake/cmake#16607
parent a423d829
......@@ -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&)
{
......
......@@ -653,6 +653,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)
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment