From ba98315f65e5d375eb316f4e7b1afc79a1923765 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Mon, 31 Mar 2014 10:34:26 +0900 Subject: [PATCH] The same fix as follows on C++ code. https://github.com/msgpack/msgpack-c/pull/38 --- src/msgpack/unpack.hpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/msgpack/unpack.hpp b/src/msgpack/unpack.hpp index 5575cbc3..8b6fe04b 100644 --- a/src/msgpack/unpack.hpp +++ b/src/msgpack/unpack.hpp @@ -116,7 +116,13 @@ struct unpack_array { }; inline void unpack_array_item(object& c, object const& o) -{ c.via.array.ptr[c.via.array.size++] = o; } +{ +#if defined(__GNUC__) && !defined(__clang__) + memcpy(&c.via.array.ptr[c.via.array.size++], &o, sizeof(object)); +#else /* __GNUC__ && !__clang__ */ + c.via.array.ptr[c.via.array.size++] = o; +#endif /* __GNUC__ && !__clang__ */ +} struct unpack_map { bool operator()(unpack_user& u, unsigned int n, object& o) const { @@ -130,8 +136,13 @@ struct unpack_map { inline void unpack_map_item(object& c, object const& k, object const& v) { +#if defined(__GNUC__) && !defined(__clang__) + memcpy(&c.via.map.ptr[c.via.map.size].key, &k, sizeof(object)); + memcpy(&c.via.map.ptr[c.via.map.size].val, &v, sizeof(object)); +#else /* __GNUC__ && !__clang__ */ c.via.map.ptr[c.via.map.size].key = k; c.via.map.ptr[c.via.map.size].val = v; +#endif /* __GNUC__ && !__clang__ */ ++c.via.map.size; } @@ -675,7 +686,6 @@ private: } private: - size_t off_; char const* start_; char const* current_;