X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;ds=sidebyside;f=xmalloc.c;h=e76758488059fb4c1c7f57faea2996e8a2e6963e;hb=d052c08764e3761670103bbf39b160c31815d78d;hp=086f3fbb69ed9b5fe351a9078af9e75d29abf80a;hpb=7a7531e544d236d58ca077ce56b7d6d0c60faa09;p=pkg%2Fabook.git diff --git a/xmalloc.c b/xmalloc.c index 086f3fb..e767584 100644 --- a/xmalloc.c +++ b/xmalloc.c @@ -78,22 +78,6 @@ xmalloc0(size_t size) return p; } -void * -xrealloc(void *ptr, size_t size) -{ - if((ptr = realloc(ptr, size)) == NULL) - (*xmalloc_handle_error)(errno); - - return ptr; -} - -void -xfree(void *ptr) -{ - free(ptr); - ptr = NULL; -} - static void * _xmalloc_inc(size_t size, size_t inc, int zero) { @@ -122,3 +106,31 @@ xmalloc0_inc(size_t size, size_t inc) return _xmalloc_inc(size, inc, 1); } +void * +xrealloc(void *ptr, size_t size) +{ + if((ptr = realloc(ptr, size)) == NULL) + (*xmalloc_handle_error)(errno); + + return ptr; +} + +void * +xrealloc_inc(void *ptr, size_t size, size_t inc) +{ + size_t total_size = size + inc; + + /* + * check if the calculation overflowed + */ + if(total_size < size) { + (*xmalloc_handle_error)(EINVAL); + return NULL; + } + + if((ptr = realloc(ptr, total_size)) == NULL) + (*xmalloc_handle_error)(errno); + + return ptr; +} +