shared/specifier: use realloc to free some memory after specifier expansion
This is a separate commit only because it actually *increases* memory allocations: ==3256== total heap usage: 100,120 allocs, 100,120 frees, 13,097,140 bytes allocated to ==4690== total heap usage: 100,121 allocs, 100,121 frees, 14,198,329 bytes allocated Essentially, we do a little more work to reduce the memory footprint a bit. For a test where we just allocate the memory and drop it soon afterwards, this is not beneficial, but it should still be useful for a long running program.
This commit is contained in:
parent
e2093454a2
commit
bec8a68cee
|
@ -102,11 +102,18 @@ int specifier_printf(const char *text, const Specifier table[], void *userdata,
|
|||
else
|
||||
*(t++) = *f;
|
||||
|
||||
/* if string ended with a stray %, also end with % */
|
||||
/* If string ended with a stray %, also end with % */
|
||||
if (percent)
|
||||
*(t++) = '%';
|
||||
*(t++) = 0;
|
||||
|
||||
/* Try to deallocate unused bytes, but don't sweat it too much */
|
||||
if ((size_t)(t - ret) < allocated) {
|
||||
t = realloc(ret, t - ret);
|
||||
if (t)
|
||||
ret = t;
|
||||
}
|
||||
|
||||
*t = 0;
|
||||
*_ret = TAKE_PTR(ret);
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue