@@ -1221,20 +1221,7 @@ int parser_trim_buffers(parser_t *self) {
1221
1221
size_t new_cap ;
1222
1222
void * newptr ;
1223
1223
1224
- /* trim stream */
1225
- new_cap = _next_pow2 (self -> stream_len ) + 1 ;
1226
- TRACE (("parser_trim_buffers: new_cap = %zu, stream_cap = %zu, lines_cap = %zu\n" ,
1227
- new_cap , self -> stream_cap , self -> lines_cap ));
1228
- if (new_cap < self -> stream_cap ) {
1229
- TRACE (("parser_trim_buffers: new_cap < self->stream_cap, calling safe_realloc\n" ));
1230
- newptr = safe_realloc ((void * ) self -> stream , new_cap );
1231
- if (newptr == NULL ) {
1232
- return PARSER_OUT_OF_MEMORY ;
1233
- } else {
1234
- self -> stream = newptr ;
1235
- self -> stream_cap = new_cap ;
1236
- }
1237
- }
1224
+ int i ;
1238
1225
1239
1226
/* trim words, word_starts */
1240
1227
new_cap = _next_pow2 (self -> words_len ) + 1 ;
@@ -1255,6 +1242,35 @@ int parser_trim_buffers(parser_t *self) {
1255
1242
}
1256
1243
}
1257
1244
1245
+ /* trim stream */
1246
+ new_cap = _next_pow2 (self -> stream_len ) + 1 ;
1247
+ TRACE (("parser_trim_buffers: new_cap = %zu, stream_cap = %zu, lines_cap = %zu\n" ,
1248
+ new_cap , self -> stream_cap , self -> lines_cap ));
1249
+ if (new_cap < self -> stream_cap ) {
1250
+ TRACE (("parser_trim_buffers: new_cap < self->stream_cap, calling safe_realloc\n" ));
1251
+ newptr = safe_realloc ((void * ) self -> stream , new_cap );
1252
+ if (newptr == NULL ) {
1253
+ return PARSER_OUT_OF_MEMORY ;
1254
+ } else {
1255
+ // realloc sets errno when moving buffer?
1256
+ if (self -> stream != newptr ) {
1257
+ // uff
1258
+ /* TRACE(("Moving word pointers\n")) */
1259
+
1260
+ self -> pword_start = newptr + self -> word_start ;
1261
+
1262
+ for (i = 0 ; i < self -> words_len ; ++ i )
1263
+ {
1264
+ self -> words [i ] = newptr + self -> word_starts [i ];
1265
+ }
1266
+ }
1267
+
1268
+ self -> stream = newptr ;
1269
+ self -> stream_cap = new_cap ;
1270
+
1271
+ }
1272
+ }
1273
+
1258
1274
/* trim line_start, line_fields */
1259
1275
new_cap = _next_pow2 (self -> lines ) + 1 ;
1260
1276
if (new_cap < self -> lines_cap ) {
0 commit comments