File tree Expand file tree Collapse file tree 1 file changed +13
-8
lines changed Expand file tree Collapse file tree 1 file changed +13
-8
lines changed Original file line number Diff line number Diff line change 2323
2424#include " WString.h"
2525#include " stdlib_noniso.h"
26+ #include " esp32-hal-log.h"
2627// extern "C" {
2728// #include "esp_common.h"
2829// }
@@ -165,19 +166,23 @@ unsigned char String::reserve(unsigned int size)
165166
166167unsigned char String::changeBuffer (unsigned int maxStrLen)
167168{
168- size_t newSize = (maxStrLen + 16 ) & (~0xf );
169- char *newbuffer = (char *) malloc ( newSize);
169+ size_t newSize = (( maxStrLen + 16 ) & (~0xf )) - 1 ;
170+ char *newbuffer = (char *) realloc (buffer, newSize+ 1 );
170171 if (newbuffer) {
171- memset (newbuffer, 0 , newSize);
172- memcpy (newbuffer, buffer, len);
173- if (buffer) {
174- free (buffer);
172+ if (newSize > len){
173+ if (newSize > capacity){
174+ memset (newbuffer+capacity, 0 , newSize-capacity);
175+ }
176+ } else {
177+ // new buffer can not fit the old len
178+ newbuffer[newSize] = 0 ;
179+ len = newSize;
175180 }
176- capacity = newSize - 1 ;
181+ capacity = newSize;
177182 buffer = newbuffer;
178183 return 1 ;
179184 }
180- buffer = newbuffer ;
185+ log_e ( " realloc failed! Buffer unchanged " ) ;
181186 return 0 ;
182187}
183188
You can’t perform that action at this time.
0 commit comments