wrbuf_cstr: ensure wrbuf_grow is never called YAZ-753
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 8 Apr 2014 12:18:04 +0000 (14:18 +0200)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 8 Apr 2014 12:18:50 +0000 (14:18 +0200)
We just throw an assert instead, but that's never going to happen.

src/wrbuf.c

index 7015bad..3c63170 100644 (file)
@@ -70,7 +70,7 @@ void wrbuf_write(WRBUF b, const char *buf, size_t size)
     if (size <= 0)
         return;
     if (b->pos + size >= b->size)
-        wrbuf_grow(b, size);
+        wrbuf_grow(b, size + 1);
     memcpy(b->buf + b->pos, buf, size);
     b->pos += size;
 }
@@ -80,7 +80,7 @@ void wrbuf_insert(WRBUF b, size_t pos, const char *buf, size_t size)
     if (size <= 0 || pos > b->pos)
         return;
     if (b->pos + size >= b->size)
-        wrbuf_grow(b, size);
+        wrbuf_grow(b, size + 1);
     memmove(b->buf + pos + size, b->buf + pos, b->pos - pos);
     memcpy(b->buf + pos, buf, size);
     b->pos += size;
@@ -263,8 +263,9 @@ void wrbuf_iconv_reset(WRBUF b, yaz_iconv_t cd)
 
 const char *wrbuf_cstr(WRBUF b)
 {
-    if (b->pos >= b->size)
-        wrbuf_grow(b, 1);
+    if (b->pos == 0)
+       return "";
+    assert(b->pos < b->size);
     b->buf[b->pos] = '\0';
     return b->buf;
 }