summaryrefslogtreecommitdiff
path: root/src/cache.c
diff options
context:
space:
mode:
authorPetr Menšík <pemensik@redhat.com>2022-07-18 13:30:07 +0200
committerSimon Kelley <simon@thekelleys.org.uk>2022-08-11 16:56:58 +0100
commit0666ae3d27fd831e46ee9d984f4271b4ec330f5f (patch)
tree528693b9077b59c7126d98dfe9188147de1060b5 /src/cache.c
parentba4c7d906b59d80bbc830162749781d2ba1bd4b3 (diff)
downloaddnsmasq-0666ae3d27fd831e46ee9d984f4271b4ec330f5f.tar.gz
Introduce whine_realloc
Move few patters with whine_malloc, if (successful) copy+free, to a new whine_realloc. It should do the same thing, but with a help from OS it can avoid unnecessary copy and free if allocation of more data after current data is possible. Added few setting remanining space to 0, because realloc does not use calloc like whine_malloc does. There is no advantage of zeroing what we will immediately overwrite. Zero only remaining space.
Diffstat (limited to 'src/cache.c')
-rw-r--r--src/cache.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/src/cache.c b/src/cache.c
index a99d70d..8ed4740 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -1676,10 +1676,8 @@ int cache_make_stat(struct txt_record *t)
{
/* expand buffer if necessary */
newlen = bytes_needed + 1 + bufflen - bytes_avail;
- if (!(new = whine_malloc(newlen)))
+ if (!(new = whine_realloc(buff, newlen)))
return 0;
- memcpy(new, buff, bufflen);
- free(buff);
p = new + (p - buff);
lenp = p - 1;
buff = new;