emalloc.h (2045B)
1 /* See LICENSE file for copyright and license details. */ 2 #include <stdlib.h> 3 #include <stdint.h> 4 5 #define emalloc(...) enmalloc(1, __VA_ARGS__) 6 #define emalloc2(...) enmalloc2(1, __VA_ARGS__) 7 #define emalloc3(...) enmalloc3(1, __VA_ARGS__) 8 #define ecalloc(...) encalloc(1, __VA_ARGS__) 9 #define erealloc(...) enrealloc(1, __VA_ARGS__) 10 #define erealloc2(...) enrealloc2(1, __VA_ARGS__) 11 #define erealloc3(...) enrealloc3(1, __VA_ARGS__) 12 13 #define malloc2(n, m) malloc(n * m); 14 #define malloc3(n1, n2, n3) malloc(n1 * n2 * n3); 15 #define realloc2(p, n, m) realloc(p, n * m); 16 #define realloc3(p, n1, n2, n3) realloc(p, n1 * n2 * n3); 17 18 static inline void * 19 enmalloc(int status, size_t n) 20 { 21 void *ptr = malloc(n); 22 if (!ptr) 23 enprintf(status, "malloc: out of memory\n"); 24 return ptr; 25 } 26 27 static inline void * 28 enmalloc2(int status, size_t n, size_t m) 29 { 30 void *ptr; 31 if (n > SIZE_MAX / m || !(ptr = malloc(n * m))) 32 enprintf(status, "malloc: out of memory\n"); 33 return ptr; 34 } 35 36 static inline void * 37 enmalloc3(int status, size_t n1, size_t n2, size_t n3) 38 { 39 void *ptr; 40 size_t n = n1; 41 if (n2 > SIZE_MAX / n || 42 n3 > SIZE_MAX / (n *= n2) || 43 !(ptr = malloc(n * n3))) 44 enprintf(status, "malloc: out of memory\n"); 45 return ptr; 46 } 47 48 static inline void * 49 encalloc(int status, size_t n, size_t m) 50 { 51 void *ptr = calloc(n, m); 52 if (!ptr) 53 enprintf(status, "calloc: out of memory\n"); 54 return ptr; 55 } 56 57 static inline void * 58 enrealloc(int status, void *ptr, size_t n) 59 { 60 ptr = realloc(ptr, n); 61 if (!ptr) 62 enprintf(status, "realloc: out of memory\n"); 63 return ptr; 64 } 65 66 static inline void * 67 enrealloc2(int status, void *ptr, size_t n, size_t m) 68 { 69 if (n > SIZE_MAX / m || !(ptr = realloc(ptr, n * m))) 70 enprintf(status, "realloc: out of memory\n"); 71 return ptr; 72 } 73 74 static inline void * 75 enrealloc3(int status, void *ptr, size_t n1, size_t n2, size_t n3) 76 { 77 size_t n = n1; 78 if (n2 > SIZE_MAX / n || 79 n3 > SIZE_MAX / (n *= n2) || 80 !(ptr = realloc(ptr, n * n3))) 81 enprintf(status, "realloc: out of memory\n"); 82 return ptr; 83 }