From 3e2ae7cc782051dff8cee4270686c78e88533968 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Mon, 11 Nov 2013 09:51:04 +0000 Subject: [PATCH] Fixed issue #37. It seems to be gcc's bug. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58416 --- src/unpack.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/unpack.c b/src/unpack.c index 4afc05e2..974b4cfc 100644 --- a/src/unpack.c +++ b/src/unpack.c @@ -111,7 +111,11 @@ static inline int template_callback_array(unpack_user* u, unsigned int n, msgpac } static inline int template_callback_array_item(unpack_user* u, msgpack_object* c, msgpack_object o) -{ c->via.array.ptr[c->via.array.size++] = o; return 0; } +{ + memcpy(&c->via.array.ptr[c->via.array.size], &o, sizeof(msgpack_object)); + ++c->via.array.size; + return 0; +} static inline int template_callback_map(unpack_user* u, unsigned int n, msgpack_object* o) { @@ -124,8 +128,8 @@ static inline int template_callback_map(unpack_user* u, unsigned int n, msgpack_ static inline int template_callback_map_item(unpack_user* u, msgpack_object* c, msgpack_object k, msgpack_object v) { - c->via.map.ptr[c->via.map.size].key = k; - c->via.map.ptr[c->via.map.size].val = v; + memcpy(&c->via.map.ptr[c->via.map.size].key, &k, sizeof(msgpack_object)); + memcpy(&c->via.map.ptr[c->via.map.size].val, &v, sizeof(msgpack_object)); ++c->via.map.size; return 0; }