diff options
| author | frsyuki <frsyuki@users.sourceforge.jp> | 2010-04-29 22:32:43 +0900 |
|---|---|---|
| committer | frsyuki <frsyuki@users.sourceforge.jp> | 2010-04-29 22:32:43 +0900 |
| commit | 8783cf8ec3abca1675a47940c1f4e162a66a562d (patch) | |
| tree | a3f82ac7a67e56f813c26e192fc444bea94c01b4 /cpp/msgpack | |
| parent | 2af7a7c6ac41961d79c14226510c9c0111547f59 (diff) | |
| download | msgpack-python-8783cf8ec3abca1675a47940c1f4e162a66a562d.tar.gz | |
cpp: fixes unpacker::next
Diffstat (limited to 'cpp/msgpack')
| -rw-r--r-- | cpp/msgpack/unpack.hpp | 15 |
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; + } } |
