Skip to content

Commit c04ef9e

Browse files
committed
Merge pull request #38 from redboltz/copy_msgpack_object_by_memcpy
Fixed issue #37.
2 parents 949b472 + b774c07 commit c04ef9e

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

src/unpack.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,15 @@ static inline int template_callback_array(unpack_user* u, unsigned int n, msgpac
111111
}
112112

113113
static inline int template_callback_array_item(unpack_user* u, msgpack_object* c, msgpack_object o)
114-
{ c->via.array.ptr[c->via.array.size++] = o; return 0; }
114+
{
115+
#if defined(__GNUC__) && !defined(__clang__)
116+
memcpy(&c->via.array.ptr[c->via.array.size], &o, sizeof(msgpack_object));
117+
#else /* __GNUC__ && !__clang__ */
118+
c->via.array.ptr[c->via.array.size] = o;
119+
#endif /* __GNUC__ && !__clang__ */
120+
++c->via.array.size;
121+
return 0;
122+
}
115123

116124
static inline int template_callback_map(unpack_user* u, unsigned int n, msgpack_object* o)
117125
{
@@ -124,8 +132,13 @@ static inline int template_callback_map(unpack_user* u, unsigned int n, msgpack_
124132

125133
static inline int template_callback_map_item(unpack_user* u, msgpack_object* c, msgpack_object k, msgpack_object v)
126134
{
135+
#if defined(__GNUC__) && !defined(__clang__)
136+
memcpy(&c->via.map.ptr[c->via.map.size].key, &k, sizeof(msgpack_object));
137+
memcpy(&c->via.map.ptr[c->via.map.size].val, &v, sizeof(msgpack_object));
138+
#else /* __GNUC__ && !__clang__ */
127139
c->via.map.ptr[c->via.map.size].key = k;
128140
c->via.map.ptr[c->via.map.size].val = v;
141+
#endif /* __GNUC__ && !__clang__ */
129142
++c->via.map.size;
130143
return 0;
131144
}

0 commit comments

Comments
 (0)