X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Futils%2Fstrbuf.c;h=d8a95ac42f60a4003d9cdf21924cbfbf2a5ccee1;hb=1886cc190cfbd37daf047194fd1a2f5c13a15d64;hp=ecc05315ef897f9d84a415ccecb9b6f77e89e9bd;hpb=3cd97771183ee38e5fc8c3b2268cffce3c2cb27c;p=sysdb.git diff --git a/src/utils/strbuf.c b/src/utils/strbuf.c index ecc0531..d8a95ac 100644 --- a/src/utils/strbuf.c +++ b/src/utils/strbuf.c @@ -25,6 +25,7 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "sysdb.h" #include "utils/strbuf.h" #include @@ -65,11 +66,18 @@ struct sdb_strbuf { static int strbuf_resize(sdb_strbuf_t *buf, size_t new_size) { + size_t tmp_size; char *tmp; if (new_size <= buf->pos) return -1; + tmp_size = SDB_MAX(buf->size, buf->min_size); + if (! tmp_size) + tmp_size = 64; + while (tmp_size < new_size) + tmp_size *= 2; + tmp = realloc(buf->string, new_size); if (! tmp) return -1; @@ -231,15 +239,8 @@ sdb_strbuf_memappend(sdb_strbuf_t *buf, const void *data, size_t n) assert((buf->size == 0) || (buf->string[buf->pos] == '\0')); - if (buf->pos + n + 1 >= buf->size) { - size_t newsize = buf->size * 2; - - if (! newsize) - newsize = 64; - while (buf->pos + n + 1 >= newsize) - newsize *= 2; - - if (strbuf_resize(buf, newsize)) + if (buf->pos + n + 1 > buf->size) { + if (strbuf_resize(buf, buf->pos + n + 1)) return -1; }