]> granicus.if.org Git - neomutt/commitdiff
test: improve test_mutt_buffer_increase_size()
authorRichard Russon <rich@flatcap.org>
Fri, 24 May 2019 22:24:04 +0000 (23:24 +0100)
committerRichard Russon <rich@flatcap.org>
Sun, 26 May 2019 16:16:51 +0000 (17:16 +0100)
mutt/buffer.c
test/buffer/mutt_buffer_increase_size.c

index 5b0fd4ecc74274ccd3673ffd30ba64c26da7e142..7c50471c46ac319690c53fc6742d7a4ccf2b0308 100644 (file)
@@ -347,10 +347,14 @@ void mutt_buffer_increase_size(struct Buffer *buf, size_t new_size)
   if (!buf)
     return;
 
+  if (!buf->dptr)
+    buf->dptr = buf->data;
+
   if (new_size <= buf->dsize)
     return;
 
-  size_t offset = buf->dptr - buf->data;
+  size_t offset = (buf->dptr && buf->data) ?  buf->dptr - buf->data : 0;
+
   buf->dsize = new_size;
   mutt_mem_realloc(&buf->data, buf->dsize);
   buf->dptr = buf->data + offset;
index 561b166108104ebc5e839e6ac6bf4903a3d9e085..8bea753814f3954facbe21ab83069463ad12fff8 100644 (file)
@@ -33,4 +33,28 @@ void test_mutt_buffer_increase_size(void)
     mutt_buffer_increase_size(NULL, 10);
     TEST_CHECK_(1, "mutt_buffer_increase_size(NULL, 10)");
   }
+
+  {
+    struct Buffer *buf = mutt_buffer_new();
+    mutt_buffer_increase_size(buf, 10);
+    TEST_CHECK_(1, "mutt_buffer_increase_size(buf, 10)");
+    mutt_buffer_free(&buf);
+  }
+
+  {
+    const int orig_size = 64;
+    static int sizes[] = { 0, 32, 64, 128 };
+
+    for (size_t i = 0; i < mutt_array_size(sizes); i++)
+    {
+      struct Buffer *buf = mutt_buffer_alloc(orig_size);
+      TEST_CASE_("%d", sizes[i]);
+      mutt_buffer_increase_size(buf, sizes[i]);
+      TEST_CHECK(buf->dsize == MAX(orig_size, sizes[i]));
+      mutt_buffer_free(&buf);
+    }
+
+  }
+
+
 }