X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=util.c;h=e34336c77e4cc171f69555ad87b00d1e6f762e5d;hp=9c8abb3393353cf08322d4292f9e0e4d0c71ccfd;hb=4ac7fd3ff73c98100d8a8546668d0212e4af3ffa;hpb=bb8398990f4b904047ddd8543f24c4ae683e1881;ds=sidebyside diff --git a/util.c b/util.c index 9c8abb3..e34336c 100644 --- a/util.c +++ b/util.c @@ -71,17 +71,30 @@ char *safe_strdup(const char *s, const char *message) void *safe_malloc(size_t size, const char *message) { void *r; + if (!size) + return 0; r=malloc(size); if (!r) { fatal_perror("%s",message); } return r; } -void *safe_malloc_ary(size_t size, size_t count, const char *message) { +void *safe_realloc_ary(void *p, size_t size, size_t count, + const char *message) { if (count >= INT_MAX/size) { fatal("array allocation overflow: %s", message); } - return safe_malloc(size*count, message); + assert(size && count); + p = realloc(p, size*count); + if (!p) + fatal_perror("%s", message); + return p; +} + +void *safe_malloc_ary(size_t size, size_t count, const char *message) { + if (!size || !count) + return 0; + return safe_realloc_ary(0,size,count,message); } /* Convert a buffer into its MP_INT representation */