diff options
author | Mattias Andrée <maandree@kth.se> | 2018-11-29 21:25:44 +0100 |
---|---|---|
committer | Mattias Andrée <maandree@kth.se> | 2018-11-29 21:25:44 +0100 |
commit | a2fc726a6225ceb94dba367cf5acfe597ce11d74 (patch) | |
tree | 7e6f705a9160b9bdad8f32463284009085dc7254 /allocn.c | |
parent | m (diff) | |
download | libsimple-a2fc726a6225ceb94dba367cf5acfe597ce11d74.tar.gz libsimple-a2fc726a6225ceb94dba367cf5acfe597ce11d74.tar.bz2 libsimple-a2fc726a6225ceb94dba367cf5acfe597ce11d74.tar.xz |
A bunch of stuff
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
-rw-r--r-- | allocn.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -15,11 +15,10 @@ alloc_size_product(int *errp, size_t n, va_list ap) n = va_arg(ap, size_t); if (!n) break; - if (n >= SIZE_MAX / prod) { + if (LIBSIMPLE_UMUL_OVERFLOW_NONZERO(n, prod, &prod, SIZE_MAX)) { *errp = ENOMEM; return 0; } - prod *= n; } return prod; } @@ -62,6 +61,15 @@ libsimple_vposix_memalignzn(void **memptr, int clear, size_t alignment, size_t n return ret; } +#ifdef LIBSIMPLE_HAVE_ALIGNED_REALLOC +void * +libsimple_valigned_reallocn(void *ptr, size_t alignment, size_t n, va_list ap) /* TODO test (aligned_reallocn) */ +{ + n = alloc_size_product(&errno, n, ap); + return !n ? NULL : aligned_realloc(ptr, alignment, n); +} +#endif + #else #include "test.h" |