mirror of
https://github.com/cuberite/libdeflate.git
synced 2025-09-08 11:50:00 -04:00
aligned_malloc: store pointer directly
This commit is contained in:
parent
18b149f52e
commit
e603f7868d
@ -140,6 +140,7 @@ typedef size_t machine_word_t;
|
||||
#define MAX(a, b) ((a) >= (b) ? (a) : (b))
|
||||
#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
|
||||
#define STATIC_ASSERT(expr) ((void)sizeof(char[1 - 2 * !(expr)]))
|
||||
#define ALIGN(n, a) (((n) + (a) - 1) & ~((a) - 1))
|
||||
|
||||
/* ========================================================================== */
|
||||
/* Endianness handling */
|
||||
|
@ -25,15 +25,11 @@
|
||||
void *
|
||||
aligned_malloc(size_t alignment, size_t size)
|
||||
{
|
||||
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;
|
||||
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;
|
||||
}
|
||||
@ -42,5 +38,5 @@ void
|
||||
aligned_free(void *ptr)
|
||||
{
|
||||
if (ptr)
|
||||
free((char *)ptr - *((size_t *)ptr - 1));
|
||||
free(((void **)ptr)[-1]);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user