From a11d22d11349a187833cf7f0e216c7009866b063 Mon Sep 17 00:00:00 2001 From: 982945902 <982945902@qq.com> Date: Fri, 22 Dec 2023 16:53:47 +0800 Subject: [PATCH] fix code error --- include/ylt/struct_pack/endian_wrapper.hpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/include/ylt/struct_pack/endian_wrapper.hpp b/include/ylt/struct_pack/endian_wrapper.hpp index 578df95e5..e1f19f16c 100644 --- a/include/ylt/struct_pack/endian_wrapper.hpp +++ b/include/ylt/struct_pack/endian_wrapper.hpp @@ -277,8 +277,8 @@ STRUCT_PACK_INLINE void write(Writer& writer, const T& t) { } else if constexpr (detail::array) { if constexpr (detail::is_little_endian_copyable && - std::is_fundamental_v) { - writer_bytes_array(writer, (const char*)&t.data(), sizeof(T)); + std::is_fundamental_v>) { + write_bytes_array(writer, (const char*)t.data(), sizeof(T)); } else { for (auto& e : t) write(writer, e); @@ -289,7 +289,7 @@ STRUCT_PACK_INLINE void write(Writer& writer, const T& t) { detail::write_wrapper(writer, (char*)&len); if constexpr (detail::continuous_container && detail::is_little_endian_copyable) { - writer_bytes_array(writer, (const char*)&t.data(), len * sizeof(t[0])); + write_bytes_array(writer, (const char*)t.data(), len * sizeof(t[0])); } else { for (auto& e : t) write(writer, e); @@ -319,7 +319,7 @@ STRUCT_PACK_INLINE constexpr std::size_t get_write_size(const T& t) { return sizeof(T); } else if constexpr (detail::array) { - if constexpr (std::is_fundamental_v) { + if constexpr (std::is_fundamental_v>) { return sizeof(T); } else { @@ -359,9 +359,9 @@ STRUCT_PACK_INLINE struct_pack::errc read(Reader& reader, T& t) { } } else if constexpr (detail::array) { - if constexpr (std::is_fundamental_v && + if constexpr (std::is_fundamental_v> && detail::is_little_endian_copyable) { - return read_bytes_array(reader, (char*)&t.data(), sizeof(T)); + return read_bytes_array(reader, (char*)t.data(), sizeof(T)); } else { struct_pack::errc ec; @@ -381,7 +381,7 @@ STRUCT_PACK_INLINE struct_pack::errc read(Reader& reader, T& t) { return ec; } if constexpr (detail::continuous_container && - std::is_fundamental_v && + std::is_fundamental_v> && detail::is_little_endian_copyable && checkable_reader_t) { if SP_UNLIKELY (sz > UINT64_MAX / sizeof(t[0]) || sz > SIZE_MAX) { @@ -392,7 +392,10 @@ STRUCT_PACK_INLINE struct_pack::errc read(Reader& reader, T& t) { return struct_pack::errc::no_buffer_space; } detail::resize(t, mem_size); - return read_bytes_array(reader, (char*)&t.data(), mem_size); + if(!read_bytes_array(reader, (char*)t.data(), mem_size)) { + return struct_pack::errc::no_buffer_space; + } + return struct_pack::errc{}; } else { for (std::size_t i = 0; i < sz; ++i) {