From: Lennart Poettering Date: Mon, 15 Oct 2018 10:05:54 +0000 (+0200) Subject: alloc-util: add alloca() counterparts for memdup() and memdup_suffix0() X-Git-Tag: v240~538^2~19 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=242c41b850af8ebc0c7a0cd44be057e50b5a027a;p=thirdparty%2Fsystemd.git alloc-util: add alloca() counterparts for memdup() and memdup_suffix0() --- diff --git a/src/basic/alloc-util.h b/src/basic/alloc-util.h index ebe42889ea9..2a6deb12ca0 100644 --- a/src/basic/alloc-util.h +++ b/src/basic/alloc-util.h @@ -46,6 +46,21 @@ static inline void *mfree(void *memory) { void* memdup(const void *p, size_t l) _alloc_(2); void* memdup_suffix0(const void *p, size_t l) _alloc_(2); +#define memdupa(p, l) \ + ({ \ + void *_q_; \ + _q_ = alloca(l); \ + memcpy(_q_, p, l); \ + }) + +#define memdupa_suffix0(p, l) \ + ({ \ + void *_q_; \ + _q_ = alloca(l + 1); \ + ((uint8_t*) _q_)[l] = 0; \ + memcpy(_q_, p, l); \ + }) + static inline void freep(void *p) { free(*(void**) p); }