summaryrefslogtreecommitdiff
path: root/cpp/unpack.cpp
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@5a5092ae-2292-43ba-b2d5-dcab9c1a2731>2009-02-15 09:09:56 +0000
committerfrsyuki <frsyuki@5a5092ae-2292-43ba-b2d5-dcab9c1a2731>2009-02-15 09:09:56 +0000
commit7e6b55a71805dabb2ad82bf6802ea81f36bc911a (patch)
tree6a9173e7225d6f30c55bbfa3a0212cff1932b965 /cpp/unpack.cpp
parent990ac38ccdb51acc520fa43c99115cb216ec95e6 (diff)
downloadmsgpack-python-7e6b55a71805dabb2ad82bf6802ea81f36bc911a.tar.gz
lang/c/msgpack: C++ binding: support non-MessagePack message that follows after MessagePack message
git-svn-id: file:///Users/frsyuki/project/msgpack-git/svn/x@56 5a5092ae-2292-43ba-b2d5-dcab9c1a2731
Diffstat (limited to 'cpp/unpack.cpp')
-rw-r--r--cpp/unpack.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/cpp/unpack.cpp b/cpp/unpack.cpp
index 5055008..d484593 100644
--- a/cpp/unpack.cpp
+++ b/cpp/unpack.cpp
@@ -82,7 +82,6 @@ void unpacker::expand_buffer(size_t len)
while(next_size < len + m_used) { next_size *= 2; }
// FIXME realloc?
-
void* tmp = malloc(next_size);
if(!tmp) { throw std::bad_alloc(); }
memcpy(tmp, m_buffer, m_used);
@@ -121,15 +120,16 @@ bool unpacker::execute()
} else if(ret == 0) {
return false;
} else {
+ expand_buffer(0);
return true;
}
}
zone* unpacker::release_zone()
{
+ zone* nz = new zone();
zone* z = m_zone;
- m_zone = NULL;
- m_zone = new zone();
+ m_zone = nz;
m_ctx->user(m_zone);
return z;
}
@@ -141,12 +141,12 @@ object unpacker::data()
void unpacker::reset()
{
+ if(m_off != 0) { expand_buffer(0); }
if(!m_zone->empty()) {
delete m_zone;
m_zone = NULL;
m_zone = new zone();
}
- expand_buffer(0);
m_ctx->reset();
}