summaryrefslogtreecommitdiff
path: root/cpp/msgpack
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@users.sourceforge.jp>2010-04-29 22:32:43 +0900
committerfrsyuki <frsyuki@users.sourceforge.jp>2010-04-29 22:32:43 +0900
commit8783cf8ec3abca1675a47940c1f4e162a66a562d (patch)
treea3f82ac7a67e56f813c26e192fc444bea94c01b4 /cpp/msgpack
parent2af7a7c6ac41961d79c14226510c9c0111547f59 (diff)
downloadmsgpack-python-8783cf8ec3abca1675a47940c1f4e162a66a562d.tar.gz
cpp: fixes unpacker::next
Diffstat (limited to 'cpp/msgpack')
-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;
+ }
}