diff --git a/include/pcp/mem.h b/include/pcp/mem.h index 6bf2909..fc840ec 100644 --- a/include/pcp/mem.h +++ b/include/pcp/mem.h @@ -38,5 +38,7 @@ void *ucmalloc(size_t s); /* the same but it fills the pointer with random values */ void *urmalloc(size_t s); +/* resize a a pointer and fill the added remainder with zeroes */ +void *ucrealloc(void *d, size_t oldlen, size_t newlen); #endif /* _HAVE_PCP_MEM */ diff --git a/libpcp/mem.c b/libpcp/mem.c index 945d258..ce70be9 100644 --- a/libpcp/mem.c +++ b/libpcp/mem.c @@ -52,3 +52,16 @@ void *urmalloc(size_t s) { } +void *ucrealloc(void *d, size_t oldlen, size_t newlen) { + newlen = newlen * sizeof(unsigned char); + void *value = realloc (d, newlen); + + if (value == NULL) { + err(errno, "Cannot reallocate %ld bytes of memory", newlen); + exit(-1); + } + + memset (&value[oldlen], 0, newlen-oldlen); + + return value; +}