summaryrefslogtreecommitdiff
path: root/cpp/src/msgpack
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/msgpack')
-rw-r--r--cpp/src/msgpack/sbuffer.hpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/cpp/src/msgpack/sbuffer.hpp b/cpp/src/msgpack/sbuffer.hpp
index a9efc6d..14c5d2a 100644
--- a/cpp/src/msgpack/sbuffer.hpp
+++ b/cpp/src/msgpack/sbuffer.hpp
@@ -28,9 +28,13 @@ class sbuffer : public msgpack_sbuffer {
public:
sbuffer(size_t initsz = MSGPACK_SBUFFER_INIT_SIZE)
{
- base::data = (char*)::malloc(initsz);
- if(!base::data) {
- throw std::bad_alloc();
+ if(initsz == 0) {
+ base::data = NULL;
+ } else {
+ base::data = (char*)::malloc(initsz);
+ if(!base::data) {
+ throw std::bad_alloc();
+ }
}
base::size = 0;
@@ -80,7 +84,7 @@ public:
private:
void expand_buffer(size_t len)
{
- size_t nsize = (base::alloc) ?
+ size_t nsize = (base::alloc > 0) ?
base::alloc * 2 : MSGPACK_SBUFFER_INIT_SIZE;
while(nsize < base::size + len) { nsize *= 2; }