chiark / gitweb /
util: add realloc_multiply() helper
authorDavid Herrmann <dh.herrmann@gmail.com>
Fri, 13 Jun 2014 16:43:22 +0000 (18:43 +0200)
committerDavid Herrmann <dh.herrmann@gmail.com>
Mon, 16 Jun 2014 13:23:06 +0000 (15:23 +0200)
This is similar to malloc_multiply() and friends. It is realloc() with a
multiplication-overflow check.

src/shared/util.h

index 5a2f10387e2a063b8217b185b5d3b0b4c3857df5..8ddd1a5daf600f49a9e94249a2735e514a2b90ed 100644 (file)
@@ -672,6 +672,13 @@ _malloc_  _alloc_(1, 2) static inline void *malloc_multiply(size_t a, size_t b)
         return malloc(a * b);
 }
 
         return malloc(a * b);
 }
 
+_alloc_(2, 3) static inline void *realloc_multiply(void *p, size_t a, size_t b) {
+        if (_unlikely_(b != 0 && a > ((size_t) -1) / b))
+                return NULL;
+
+        return realloc(p, a * b);
+}
+
 _alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t a, size_t b) {
         if (_unlikely_(b != 0 && a > ((size_t) -1) / b))
                 return NULL;
 _alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t a, size_t b) {
         if (_unlikely_(b != 0 && a > ((size_t) -1) / b))
                 return NULL;