1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-21 10:26:06 +03:00

Merge pull request #1693 from raheelh/patch-2

Leverage realloc() in String::changeBuffer()
This commit is contained in:
Ivan Grokhotkov 2016-03-01 12:22:16 +03:00
commit 7aa061c6ea

View File

@ -153,13 +153,12 @@ unsigned char ICACHE_FLASH_ATTR String::reserve(unsigned int size) {
unsigned char ICACHE_FLASH_ATTR String::changeBuffer(unsigned int maxStrLen) { unsigned char ICACHE_FLASH_ATTR String::changeBuffer(unsigned int maxStrLen) {
size_t newSize = (maxStrLen + 16) & (~0xf); size_t newSize = (maxStrLen + 16) & (~0xf);
char *newbuffer = (char *) malloc(newSize); char *newbuffer = (char *) realloc(buffer, newSize);
if(newbuffer) { if(newbuffer) {
memset(newbuffer, 0, newSize); size_t oldSize = capacity + 1; // include NULL.
if (buffer) if (newSize > oldSize)
{ {
memcpy(newbuffer, buffer, len); memset(newbuffer + oldSize, 0, newSize - oldSize);
free(buffer);
} }
capacity = newSize - 1; capacity = newSize - 1;
buffer = newbuffer; buffer = newbuffer;