comparison src/libmlk-core/core/alloc.c @ 402:d3fa956cdaf0

core: add alloc_sdupf
author David Demelier <markand@malikania.fr>
date Wed, 30 Mar 2022 15:06:55 +0200
parents 460c78706989
children 7321511052f6
comparison
equal deleted inserted replaced
401:df5e1fea1d2e 402:d3fa956cdaf0
22 #include <string.h> 22 #include <string.h>
23 23
24 #include <SDL.h> 24 #include <SDL.h>
25 25
26 #include "alloc.h" 26 #include "alloc.h"
27 #include "buf.h"
27 #include "error.h" 28 #include "error.h"
28 #include "panic.h" 29 #include "panic.h"
29 30
30 static void * 31 static void *
31 panic_alloc(size_t size) 32 panic_alloc(size_t size)
183 memcpy(ret, src, length + 1); 184 memcpy(ret, src, length + 1);
184 185
185 return ret; 186 return ret;
186 } 187 }
187 188
189 char *
190 alloc_sdupf(const char *fmt, ...)
191 {
192 struct buf buf = {0};
193 char *ret;
194 va_list ap;
195
196 va_start(ap, fmt);
197 buf_vprintf(&buf, fmt, ap);
198 va_end(ap);
199
200 if (!buf.data)
201 panicf("%s", strerror(ENOMEM));
202
203 /*
204 * We need to reallocate a copy because the API expects to use
205 * alloc_free.
206 */
207 ret = alloc_dup(buf.data, buf.length + 1);
208 buf_finish(&buf);
209
210 return ret;
211 }
212
188 int 213 int
189 alloc_pool_init(struct alloc_pool *pool, size_t elemsize, void (*finalizer)(void *)) 214 alloc_pool_init(struct alloc_pool *pool, size_t elemsize, void (*finalizer)(void *))
190 { 215 {
191 assert(pool); 216 assert(pool);
192 assert(elemsize != 0); 217 assert(elemsize != 0);