Mercurial > molko
comparison libmlk-core/core/alloc.c @ 269:9b758eb84556
core: add alloc_rearray0 function
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 11 Dec 2020 11:33:58 +0100 |
parents | 95c2c4a72410 |
children | 196264679079 |
comparison
equal
deleted
inserted
replaced
268:3f710c68bb97 | 269:9b758eb84556 |
---|---|
91 | 91 |
92 return ptr; | 92 return ptr; |
93 } | 93 } |
94 | 94 |
95 void * | 95 void * |
96 alloc_array(size_t n, size_t size) | 96 alloc_array(size_t len, size_t elemsize) |
97 { | 97 { |
98 assert(n != 0); | 98 assert(len != 0); |
99 assert(size != 0); | 99 assert(elemsize != 0); |
100 | 100 |
101 size_t total = n * size; | 101 size_t size = len * elemsize; |
102 | 102 |
103 if (total / n != size) | 103 if (size / len != elemsize) |
104 return errorf("%s", strerror(ENOMEM)), NULL; | 104 return errorf("%s", strerror(ENOMEM)), NULL; |
105 | 105 |
106 return funcs->alloc(total); | 106 return funcs->alloc(size); |
107 } | 107 } |
108 | 108 |
109 void * | 109 void * |
110 alloc_array0(size_t n, size_t size) | 110 alloc_array0(size_t len, size_t elemsize) |
111 { | 111 { |
112 assert(n != 0); | 112 assert(len != 0); |
113 assert(size != 0); | 113 assert(elemsize != 0); |
114 | 114 |
115 void *mem; | 115 void *mem; |
116 size_t total = n * size; | 116 size_t size = len * elemsize; |
117 | 117 |
118 if (total / n != size) | 118 if (size / len != elemsize) |
119 return errorf("%s", strerror(ENOMEM)), NULL; | 119 return errorf("%s", strerror(ENOMEM)), NULL; |
120 | 120 |
121 if ((mem = funcs->alloc(total))) | 121 if ((mem = funcs->alloc(size))) |
122 memset(mem, 0, total); | 122 memset(mem, 0, size); |
123 | 123 |
124 return mem; | 124 return mem; |
125 } | 125 } |
126 | 126 |
127 void * | 127 void * |
128 alloc_renew(void *ptr, size_t amount) | 128 alloc_renew(void *ptr, size_t size) |
129 { | 129 { |
130 return funcs->realloc(ptr, amount); | 130 return funcs->realloc(ptr, size); |
131 } | 131 } |
132 | 132 |
133 void * | 133 void * |
134 alloc_rearray(void *ptr, size_t n, size_t size) | 134 alloc_rearray(void *ptr, size_t len, size_t elemsize) |
135 { | 135 { |
136 size_t total = n * size; | 136 size_t size = len * elemsize; |
137 | 137 |
138 if (total / n != size) | 138 if (size / len != elemsize) |
139 return errorf("%s", strerror(ENOMEM)), NULL; | 139 return errorf("%s", strerror(ENOMEM)), NULL; |
140 | 140 |
141 return funcs->realloc(ptr, total); | 141 return funcs->realloc(ptr, size); |
142 } | |
143 | |
144 void * | |
145 alloc_rearray0(void *ptr, size_t oldlen, size_t newlen, size_t elemsize) | |
146 { | |
147 size_t size = newlen * elemsize; | |
148 | |
149 if (size / newlen != elemsize) | |
150 return errorf("%s", strerror(ENOMEM)), NULL; | |
151 if (!(ptr = funcs->realloc(ptr, size))) | |
152 return false; | |
153 | |
154 if (newlen > oldlen) | |
155 memset((unsigned char *)ptr + (oldlen * elemsize), 0, (newlen - oldlen) * elemsize); | |
156 | |
157 return ptr; | |
142 } | 158 } |
143 | 159 |
144 void * | 160 void * |
145 alloc_dup(const void *ptr, size_t size) | 161 alloc_dup(const void *ptr, size_t size) |
146 { | 162 { |