From 2d77eae5999bd803429bc73949690a7234352e83 Mon Sep 17 00:00:00 2001 From: Raheel Hameed Date: Sun, 28 Feb 2016 02:50:48 -0600 Subject: [PATCH] Leverage realloc() in String::changeBuffer() --- cores/esp8266/WString.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/cores/esp8266/WString.cpp b/cores/esp8266/WString.cpp index 95a515c24..5e7b3fcc9 100644 --- a/cores/esp8266/WString.cpp +++ b/cores/esp8266/WString.cpp @@ -153,13 +153,12 @@ unsigned char ICACHE_FLASH_ATTR String::reserve(unsigned int size) { unsigned char ICACHE_FLASH_ATTR String::changeBuffer(unsigned int maxStrLen) { size_t newSize = (maxStrLen + 16) & (~0xf); - char *newbuffer = (char *) malloc(newSize); + char *newbuffer = (char *) realloc(buffer, newSize); if(newbuffer) { - memset(newbuffer, 0, newSize); - if (buffer) + size_t oldSize = capacity + 1; // include NULL. + if (newSize > oldSize) { - memcpy(newbuffer, buffer, len); - free(buffer); + memset(newbuffer + oldSize, 0, newSize - oldSize); } capacity = newSize - 1; buffer = newbuffer;