summaryrefslogtreecommitdiff
path: root/cpp/msgpack/unpack.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/msgpack/unpack.hpp')
-rw-r--r--cpp/msgpack/unpack.hpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/cpp/msgpack/unpack.hpp b/cpp/msgpack/unpack.hpp
index dbe7777..56ce0f6 100644
--- a/cpp/msgpack/unpack.hpp
+++ b/cpp/msgpack/unpack.hpp
@@ -219,15 +219,22 @@ inline void unpacker::buffer_consumed(size_t size)
inline bool unpacker::next(unpacked* result)
{
int ret = msgpack_unpacker_execute(this);
+
if(ret < 0) {
throw unpack_error("parse error");
}
- result->zone().reset( release_zone() );
- result->get() = data();
- reset();
+ if(ret == 0) {
+ result->zone().reset();
+ result->get() = object();
+ return false;
- return ret > 0;
+ } else {
+ result->zone().reset( release_zone() );
+ result->get() = data();
+ reset();
+ return true;
+ }
}