X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=src%2Fstrbuffer.c;h=758e95e7c0664581ef2de65b2342d14ece803e60;hb=cf9b384bcbd2fab0bfb44e0165368d3abc965f32;hp=3496024770d9396b21a45e927c71fe83e129dfc4;hpb=08dc8d9bafcb13bb1541894918f4a394e644e6e1;p=jansson.git diff --git a/src/strbuffer.c b/src/strbuffer.c index 3496024..758e95e 100644 --- a/src/strbuffer.c +++ b/src/strbuffer.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010 Petri Lehtinen + * Copyright (c) 2009-2011 Petri Lehtinen * * Jansson is free software; you can redistribute it and/or modify * it under the terms of the MIT license. See LICENSE for details. @@ -8,8 +8,8 @@ #define _GNU_SOURCE #include #include +#include "jansson_private.h" #include "strbuffer.h" -#include "util.h" #define STRBUFFER_MIN_SIZE 16 #define STRBUFFER_FACTOR 2 @@ -68,12 +68,21 @@ int strbuffer_append_bytes(strbuffer_t *strbuff, const char *data, int size) { if(strbuff->length + size >= strbuff->size) { - strbuff->size = max(strbuff->size * STRBUFFER_FACTOR, - strbuff->length + size + 1); + size_t new_size; + char *new_value; - strbuff->value = realloc(strbuff->value, strbuff->size); - if(!strbuff->value) + new_size = max(strbuff->size * STRBUFFER_FACTOR, + strbuff->length + size + 1); + + new_value = jsonp_malloc(new_size); + if(!new_value) return -1; + + memcpy(new_value, strbuff->value, strbuff->length); + + jsonp_free(strbuff->value); + strbuff->value = new_value; + strbuff->size = new_size; } memcpy(strbuff->value + strbuff->length, data, size);