From: Jan Janssen Date: Mon, 15 Nov 2021 11:25:04 +0000 (+0100) Subject: sd-boot: Add non-failing allocators X-Git-Tag: v250-rc1~48^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=484ddd29262fa7c01840428c9da31267a4973aa7;p=thirdparty%2Fsystemd.git sd-boot: Add non-failing allocators --- diff --git a/src/boot/efi/util.h b/src/boot/efi/util.h index e925f1728bd..9505d3bf214 100644 --- a/src/boot/efi/util.h +++ b/src/boot/efi/util.h @@ -24,6 +24,29 @@ #define UINT64_MAX ((UINT64) -1) #endif +#define assert_alloc_ret(p) \ + ({ \ + void *_p = (p); \ + assert(_p); \ + _p; \ + }) + +#define xnew_alloc(type, n, alloc) \ + ({ \ + UINTN _alloc_size; \ + if (__builtin_mul_overflow(sizeof(type), (n), &_alloc_size)) \ + assert_not_reached(); \ + (type *) alloc(_alloc_size); \ + }) + +#define xallocate_pool(size) assert_alloc_ret(AllocatePool(size)) +#define xallocate_zero_pool(size) assert_alloc_ret(AllocateZeroPool(size)) +#define xreallocate_pool(p, old_size, new_size) assert_alloc_ret(ReallocatePool((p), (old_size), (new_size))) +#define xpool_print(fmt, ...) ((CHAR16 *) assert_alloc_ret(PoolPrint((fmt), ##__VA_ARGS__))) +#define xstrdup(str) ((CHAR16 *) assert_alloc_ret(StrDuplicate(str))) +#define xnew(type, n) xnew_alloc(type, (n), xallocate_pool) +#define xnew0(type, n) xnew_alloc(type, (n), xallocate_zero_pool) + EFI_STATUS parse_boolean(const CHAR8 *v, BOOLEAN *b); UINT64 ticks_read(void);