From 484ddd29262fa7c01840428c9da31267a4973aa7 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 15 Nov 2021 12:25:04 +0100 Subject: [PATCH] sd-boot: Add non-failing allocators --- src/boot/efi/util.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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); -- 2.47.3