aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil/basicfile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenutil/basicfile.cpp')
-rw-r--r--src/zenutil/basicfile.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/zenutil/basicfile.cpp b/src/zenutil/basicfile.cpp
index 266146ca1..174125069 100644
--- a/src/zenutil/basicfile.cpp
+++ b/src/zenutil/basicfile.cpp
@@ -372,7 +372,7 @@ BasicFile::Flush()
}
uint64_t
-BasicFile::FileSize()
+BasicFile::FileSize() const
{
#if ZEN_PLATFORM_WINDOWS
ULARGE_INTEGER liFileSize;
@@ -401,7 +401,7 @@ BasicFile::FileSize()
}
uint64_t
-BasicFile::FileSize(std::error_code& Ec)
+BasicFile::FileSize(std::error_code& Ec) const
{
#if ZEN_PLATFORM_WINDOWS
ULARGE_INTEGER liFileSize;
@@ -565,20 +565,27 @@ TemporaryFile::MoveTemporaryIntoPlace(std::filesystem::path FinalFileName, std::
//////////////////////////////////////////////////////////////////////////
void
-TemporaryFile::SafeWriteFile(std::filesystem::path Path, MemoryView Data)
+TemporaryFile::SafeWriteFile(const std::filesystem::path& Path, MemoryView Data)
{
TemporaryFile TempFile;
std::error_code Ec;
- TempFile.CreateTemporary(Path.parent_path(), Ec);
+ SafeWriteFile(Path, Data, Ec);
if (Ec)
{
- throw std::system_error(Ec, fmt::format("Failed to create temp file for file at '{}'", Path));
+ throw std::system_error(Ec, fmt::format("Failed to safely write file '{}'", Path));
}
- TempFile.Write(Data, 0);
- TempFile.MoveTemporaryIntoPlace(Path, Ec);
- if (Ec)
+}
+
+void
+TemporaryFile::SafeWriteFile(const std::filesystem::path& Path, MemoryView Data, std::error_code& OutEc)
+{
+ TemporaryFile TempFile;
+ if (TempFile.CreateTemporary(Path.parent_path(), OutEc); !OutEc)
{
- throw std::system_error(Ec, fmt::format("Failed to move temp file '{}' to '{}'", TempFile.GetPath(), Path));
+ if (TempFile.Write(Data, 0, OutEc); !OutEc)
+ {
+ TempFile.MoveTemporaryIntoPlace(Path, OutEc);
+ }
}
}