From c5287b90444ad72fb8e91aaa0c83a5ac09bd491e Mon Sep 17 00:00:00 2001
From: Sergey Lyubka <valenok@gmail.com>
Date: Wed, 9 Apr 2014 23:52:16 +0100
Subject: [PATCH] iobuf_append() refactored: allocating exactly as many bytes
 as needed

---
 mongoose.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/mongoose.c b/mongoose.c
index 878beba33..fee10c57e 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -266,10 +266,6 @@ int ns_hexdump(const void *buf, int len, char *dst, int dst_len);
 #define NS_FREE free
 #endif
 
-#ifndef IOBUF_RESIZE_MULTIPLIER
-#define IOBUF_RESIZE_MULTIPLIER 2.0
-#endif
-
 void iobuf_init(struct iobuf *iobuf, size_t size) {
   iobuf->len = iobuf->size = 0;
   iobuf->buf = NULL;
@@ -288,19 +284,18 @@ void iobuf_free(struct iobuf *iobuf) {
 
 size_t iobuf_append(struct iobuf *io, const void *buf, size_t len) {
   char *p = NULL;
-  size_t new_len = io->len + len, new_size = new_len * IOBUF_RESIZE_MULTIPLIER;
 
   assert(io->len <= io->size);
 
   if (len <= 0) {
-  } else if (new_len < io->size) {
+  } else if (io->len + len <= io->size) {
     memcpy(io->buf + io->len, buf, len);
-    io->len = new_len;
-  } else if ((p = (char *) NS_REALLOC(io->buf, new_size)) != NULL) {
+    io->len += len;
+  } else if ((p = (char *) NS_REALLOC(io->buf, io->len + len)) != NULL) {
     io->buf = p;
     memcpy(io->buf + io->len, buf, len);
-    io->len = new_len;
-    io->size = new_size;
+    io->len += len;
+    io->size = io->len;
   } else {
     len = 0;
   }
-- 
GitLab