Implement fs::isfile (#11447)

This commit is contained in:
Eladash 2022-01-29 21:10:48 +02:00 committed by GitHub
parent bb65e6797f
commit 781b2b4548
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 11 additions and 3 deletions

View file

@ -1413,6 +1413,12 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
};
m_file = std::make_unique<unix_file>(fd);
if (mode & fs::isfile && !(mode & fs::write) && stat().is_directory)
{
m_file.reset();
g_tls_error = error::isdir;
}
#endif
}

View file

@ -32,6 +32,7 @@ namespace fs
excl,
lock,
unread,
isfile,
__bitset_enum_max
};
@ -44,6 +45,7 @@ namespace fs
constexpr auto excl = +open_mode::excl; // Failure if the file already exists (used with `create`)
constexpr auto lock = +open_mode::lock; // Prevent opening the file more than once
constexpr auto unread = +open_mode::unread; // Aggressively prevent reading the opened file (do not use)
constexpr auto isfile = +open_mode::isfile; // Ensure valid fs::file handle is not of directory
constexpr auto write_new = write + create + excl;
constexpr auto rewrite = write + create + trunc;