diff options
Diffstat (limited to 'src/zenstore/cas.cpp')
| -rw-r--r-- | src/zenstore/cas.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/zenstore/cas.cpp b/src/zenstore/cas.cpp index f1a141ca0..4f137744b 100644 --- a/src/zenstore/cas.cpp +++ b/src/zenstore/cas.cpp @@ -214,9 +214,19 @@ CasImpl::UpdateManifest() ZEN_TRACE("Writing new manifest to '{}'", ManifestPath); - BasicFile Marker; - Marker.Open(ManifestPath.c_str(), BasicFile::Mode::kTruncate); + TemporaryFile Marker; + std::error_code Ec; + Marker.CreateTemporary(ManifestPath.parent_path(), Ec); + if (Ec) + { + throw std::system_error(Ec, fmt::format("Failed to create temp file for cas manifest at '{}'", ManifestPath)); + } Marker.Write(m_ManifestObject.GetBuffer(), 0); + Marker.MoveTemporaryIntoPlace(ManifestPath, Ec); + if (Ec) + { + throw std::system_error(Ec, fmt::format("Failed to move temp file '{}' to '{}'", Marker.GetPath(), ManifestPath)); + } } CasStore::InsertResult |