summaryrefslogtreecommitdiffhomepage
path: root/serialize
diff options
context:
space:
mode:
Diffstat (limited to 'serialize')
-rw-r--r--serialize/world-reader.cpp3
-rw-r--r--serialize/world-writer.cpp18
2 files changed, 15 insertions, 6 deletions
diff --git a/serialize/world-reader.cpp b/serialize/world-reader.cpp
index 555785ff..ec8b733a 100644
--- a/serialize/world-reader.cpp
+++ b/serialize/world-reader.cpp
@@ -11,6 +11,7 @@
#include "src/anim-atlas.hpp"
#include "src/chunk-scenery.hpp"
#include "compat/strerror.hpp"
+#include <cerrno>
#include <cstring>
#include <memory>
@@ -473,9 +474,7 @@ world world::deserialize(StringView filename)
fm_soft_assert(filename.flags() & StringViewFlag::NullTerminated);
FILE_raii f = ::fopen(filename.data(), "rb");
if (!f)
- {
fm_throw("fopen(\"{}\", \"r\"): {}"_cf, filename, get_error_string(errbuf));
- }
if (int ret = ::fseek(f, 0, SEEK_END); ret != 0)
fm_throw("fseek(SEEK_END): {}"_cf, get_error_string(errbuf));
size_t len;
diff --git a/serialize/world-writer.cpp b/serialize/world-writer.cpp
index 9fb65e3d..c41fa89d 100644
--- a/serialize/world-writer.cpp
+++ b/serialize/world-writer.cpp
@@ -14,8 +14,9 @@
#include "src/anim-atlas.hpp"
#include "src/light.hpp"
#include "compat/strerror.hpp"
-#include <concepts>
+#include <cerrno>
#include <cstring>
+#include <concepts>
#include <vector>
#include <algorithm>
#include <string_view>
@@ -630,13 +631,22 @@ void world::serialize(StringView filename)
Path::remove(filename);
FILE_raii file = ::fopen(filename.data(), "wb");
if (!file)
- fm_abort("fopen(\"%s\", \"w\"): %s", filename.data(), get_error_string(errbuf).data());
+ {
+ int error = errno;
+ fm_abort("fopen(\"%s\", \"w\"): %s", filename.data(), get_error_string(errbuf, error).data());
+ }
writer_state s{*this};
const auto array = s.serialize_world();
if (auto len = ::fwrite(array.data(), array.size(), 1, file); len != 1)
- fm_abort("fwrite: %s", get_error_string(errbuf).data());
+ {
+ int error = errno;
+ fm_abort("fwrite: %s", get_error_string(errbuf, error).data());
+ }
if (int ret = ::fflush(file); ret != 0)
- fm_abort("fflush: %s", get_error_string(errbuf).data());
+ {
+ int error = errno;
+ fm_abort("fflush: %s", get_error_string(errbuf, error).data());
+ }
}
} // namespace floormat