File tree 1 file changed +13
-8
lines changed
1 file changed +13
-8
lines changed Original file line number Diff line number Diff line change 23
23
24
24
#include " WString.h"
25
25
#include " stdlib_noniso.h"
26
+ #include " esp32-hal-log.h"
26
27
// extern "C" {
27
28
// #include "esp_common.h"
28
29
// }
@@ -165,19 +166,23 @@ unsigned char String::reserve(unsigned int size)
165
166
166
167
unsigned char String::changeBuffer (unsigned int maxStrLen)
167
168
{
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 );
170
171
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;
175
180
}
176
- capacity = newSize - 1 ;
181
+ capacity = newSize;
177
182
buffer = newbuffer;
178
183
return 1 ;
179
184
}
180
- buffer = newbuffer ;
185
+ log_e ( " realloc failed! Buffer unchanged " ) ;
181
186
return 0 ;
182
187
}
183
188
You can’t perform that action at this time.
0 commit comments