From 26d5d280ea5394a573add55e1e22cb56a1515c4c Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Wed, 14 Sep 2016 20:46:10 -0700 Subject: [PATCH 1/1] util.c: for aligned_malloc, store original pointer directly --- src/util.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/util.c b/src/util.c index 928a0368..e0c5cc1b 100644 --- a/src/util.c +++ b/src/util.c @@ -105,18 +105,13 @@ wimlib_wcsdup(const wchar_t *str) void * wimlib_aligned_malloc(size_t size, size_t alignment) { - wimlib_assert(alignment != 0 && is_power_of_2(alignment) && - alignment <= 4096); - - const uintptr_t mask = alignment - 1; - char *ptr = NULL; - char *raw_ptr; - - raw_ptr = MALLOC(mask + sizeof(size_t) + size); - if (raw_ptr) { - ptr = (char *)raw_ptr + sizeof(size_t); - ptr = (void *)(((uintptr_t)ptr + mask) & ~mask); - *((size_t *)ptr - 1) = ptr - raw_ptr; + wimlib_assert(is_power_of_2(alignment)); + + void *ptr = MALLOC(sizeof(void *) + alignment - 1 + size); + if (ptr) { + void *orig_ptr = ptr; + ptr = (void *)ALIGN((uintptr_t)ptr + sizeof(void *), alignment); + ((void **)ptr)[-1] = orig_ptr; } return ptr; } @@ -125,7 +120,7 @@ void wimlib_aligned_free(void *ptr) { if (ptr) - FREE((char *)ptr - *((size_t *)ptr - 1)); + FREE(((void **)ptr)[-1]); } void * -- 2.43.0