diff options
author | Morph <39850852+Morph1984@users.noreply.github.com> | 2021-06-19 03:49:11 -0400 |
---|---|---|
committer | Morph <39850852+Morph1984@users.noreply.github.com> | 2021-06-22 15:06:58 -0400 |
commit | 76b2313b25e2fd33a508f63137d5113e1ca85150 (patch) | |
tree | da79f542733f16ca27b834da5805a75503b1019a /src/common/fs/fs.cpp | |
parent | cf0b9d1de2dd895de3ebc08b6399d8239f7096f7 (diff) |
common: fs: Amend IsFile check in FileOpen / (Write/Append)StringToFile
This check was preventing files with the Write or Append file access modes from being created, as per the documented behavior in FileAccessMode.
This amends the check to test for the existence of a filesystem object prior to checking whether it is a regular file.
Thanks to liushuyu for pointing out that removing the check altogether would not guard against attempting to open non-regular files such as directories, symlinks, FIFO (pipes), sockets, block devices, or character devices.
The documentation has also been updated for these functions to clarify that a file refers to a regular file.
Diffstat (limited to 'src/common/fs/fs.cpp')
-rw-r--r-- | src/common/fs/fs.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/common/fs/fs.cpp b/src/common/fs/fs.cpp index d3159e908..9089cad67 100644 --- a/src/common/fs/fs.cpp +++ b/src/common/fs/fs.cpp @@ -135,8 +135,9 @@ std::shared_ptr<IOFile> FileOpen(const fs::path& path, FileAccessMode mode, File return nullptr; } - if (!IsFile(path)) { - LOG_ERROR(Common_Filesystem, "Filesystem object at path={} is not a file", + if (Exists(path) && !IsFile(path)) { + LOG_ERROR(Common_Filesystem, + "Filesystem object at path={} exists and is not a regular file", PathToUTF8String(path)); return nullptr; } |