From: Eric Biggers Date: Thu, 15 Sep 2016 03:46:10 +0000 (-0700) Subject: util.c: for aligned_malloc, store original pointer directly X-Git-Tag: v1.11.0~65 X-Git-Url: https://wimlib.net/git/?p=wimlib;a=commitdiff_plain;h=26d5d280ea5394a573add55e1e22cb56a1515c4c;hp=c4bc1aa59275243ace4833073b0b4836a3bdfc2f util.c: for aligned_malloc, store original pointer directly --- 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 *