aboutsummaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-05-16 14:56:20 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-09-04 14:54:00 +0000
commitc1fa4a7f8c6d30442815b095f92d1c8fb66936f3 (patch)
tree99210425bb63d69a990fba62663f57e99f83c77e /external
parentslow-hash: fix CNv2+ on big endian (diff)
downloadmonero-c1fa4a7f8c6d30442815b095f92d1c8fb66936f3.tar.xz
boost: fix little/big endian compatibility
When no little/big endian flag is given to the writer, it stores data in host endianness. When loading, if no flag is set, it also assumes host endianness. This works as long as the loading and writing are done on machines with the same endianness. We change this to default to little endian when saving. This will cause the loader to see the little endian flag, and swap endianness when loading on a big endian machine. Similarly, writing on a big endian machine will swap on save, and a little endian machine will load little endian data.
Diffstat (limited to 'external')
-rw-r--r--external/boost/archive/portable_binary_iarchive.hpp4
-rw-r--r--external/boost/archive/portable_binary_oarchive.hpp2
2 files changed, 4 insertions, 2 deletions
diff --git a/external/boost/archive/portable_binary_iarchive.hpp b/external/boost/archive/portable_binary_iarchive.hpp
index bd19599f3..d17e95c05 100644
--- a/external/boost/archive/portable_binary_iarchive.hpp
+++ b/external/boost/archive/portable_binary_iarchive.hpp
@@ -258,7 +258,7 @@ portable_binary_iarchive::load_impl(boost::intmax_t & l, char maxsize){
this->primitive_base_t::load_binary(cptr, size);
#if BOOST_ENDIAN_BIG_BYTE
- if(m_flags & endian_little)
+ if((m_flags & endian_little) || (!(m_flags & endian_big)))
#else
if(m_flags & endian_big)
#endif
@@ -343,6 +343,8 @@ portable_binary_iarchive::init(unsigned int flags){
);
#endif
}
+ if (!(m_flags & (endian_little | endian_big)))
+ m_flags |= endian_little;
unsigned char x;
load(x);
m_flags = x << CHAR_BIT;
diff --git a/external/boost/archive/portable_binary_oarchive.hpp b/external/boost/archive/portable_binary_oarchive.hpp
index 783c7f7c9..a0ac0a9b5 100644
--- a/external/boost/archive/portable_binary_oarchive.hpp
+++ b/external/boost/archive/portable_binary_oarchive.hpp
@@ -171,7 +171,7 @@ protected:
void init(unsigned int flags);
public:
- portable_binary_oarchive(std::ostream & os, unsigned flags = 0) :
+ portable_binary_oarchive(std::ostream & os, unsigned flags = endian_little) :
primitive_base_t(
* os.rdbuf(),
0 != (flags & boost::archive::no_codecvt)