summaryrefslogtreecommitdiffhomepage
path: root/serialize/world-reader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'serialize/world-reader.cpp')
-rw-r--r--serialize/world-reader.cpp28
1 files changed, 21 insertions, 7 deletions
diff --git a/serialize/world-reader.cpp b/serialize/world-reader.cpp
index 615aba0d..602eabf5 100644
--- a/serialize/world-reader.cpp
+++ b/serialize/world-reader.cpp
@@ -117,32 +117,46 @@ namespace floormat {
world world::deserialize(StringView filename)
{
char errbuf[128];
- constexpr auto strerror = []<std::size_t N> (char (&buf)[N]) -> const char* {
+ constexpr auto get_error_string = []<std::size_t N> (char (&buf)[N]) {
buf[0] = '\0';
#ifndef _WIN32
(void)::strerror_r(errno, buf, std::size(buf));
#else
(void)::strerror_s(buf, std::size(buf), errno);
#endif
- return buf;
};
fm_assert(filename.flags() & StringViewFlag::NullTerminated);
FILE_raii f = ::fopen(filename.data(), "rb");
if (!f)
- fm_abort("fopen(\"%s\", \"r\"): %s", filename.data(), strerror(errbuf));
+ {
+ get_error_string(errbuf);
+ fm_abort("fopen(\"%s\", \"r\"): %s", filename.data(), errbuf);
+ }
if (int ret = ::fseek(f, 0, SEEK_END); ret != 0)
- fm_abort("fseek(SEEK_END): %s", strerror(errbuf));
+ {
+ get_error_string(errbuf);
+ fm_abort("fseek(SEEK_END): %s", errbuf);
+ }
std::size_t len;
if (auto len_ = ::ftell(f); len_ >= 0)
len = (std::size_t)len_;
else
- fm_abort("ftell: %s", strerror(errbuf));
+ {
+ get_error_string(errbuf);
+ fm_abort("ftell: %s", errbuf);
+ }
if (int ret = ::fseek(f, 0, SEEK_SET); ret != 0)
- fm_abort("fseek(SEEK_SET): %s", strerror(errbuf));
+ {
+ get_error_string(errbuf);
+ fm_abort("fseek(SEEK_SET): %s", errbuf);
+ }
auto buf_ = std::make_unique<char[]>(len);
if (auto ret = ::fread(&buf_[0], 1, len, f); ret != len)
- fm_abort("fread short read: %s", strerror(errbuf));
+ {
+ get_error_string(errbuf);
+ fm_abort("fread short read: %s", errbuf);
+ }
world w;
Serialize::reader_state s{w};