emalloc.h - blind - suckless command-line video editing utility
(HTM) git clone git://git.suckless.org/blind
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
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 }