mirror of
https://github.com/cuberite/libdeflate.git
synced 2025-09-10 12:58:30 -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 MAX(a, b) ((a) >= (b) ? (a) : (b))
|
||||||
#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
|
#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
|
||||||
#define STATIC_ASSERT(expr) ((void)sizeof(char[1 - 2 * !(expr)]))
|
#define STATIC_ASSERT(expr) ((void)sizeof(char[1 - 2 * !(expr)]))
|
||||||
|
#define ALIGN(n, a) (((n) + (a) - 1) & ~((a) - 1))
|
||||||
|
|
||||||
/* ========================================================================== */
|
/* ========================================================================== */
|
||||||
/* Endianness handling */
|
/* Endianness handling */
|
||||||
|
@ -25,15 +25,11 @@
|
|||||||
void *
|
void *
|
||||||
aligned_malloc(size_t alignment, size_t size)
|
aligned_malloc(size_t alignment, size_t size)
|
||||||
{
|
{
|
||||||
const uintptr_t mask = alignment - 1;
|
void *ptr = malloc(sizeof(void *) + alignment - 1 + size);
|
||||||
char *ptr = NULL;
|
if (ptr) {
|
||||||
char *raw_ptr;
|
void *orig_ptr = ptr;
|
||||||
|
ptr = (void *)ALIGN((uintptr_t)ptr + sizeof(void *), alignment);
|
||||||
raw_ptr = malloc(mask + sizeof(size_t) + size);
|
((void **)ptr)[-1] = orig_ptr;
|
||||||
if (raw_ptr) {
|
|
||||||
ptr = (char *)raw_ptr + sizeof(size_t);
|
|
||||||
ptr = (void *)(((uintptr_t)ptr + mask) & ~mask);
|
|
||||||
*((size_t *)ptr - 1) = ptr - raw_ptr;
|
|
||||||
}
|
}
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
@ -42,5 +38,5 @@ void
|
|||||||
aligned_free(void *ptr)
|
aligned_free(void *ptr)
|
||||||
{
|
{
|
||||||
if (ptr)
|
if (ptr)
|
||||||
free((char *)ptr - *((size_t *)ptr - 1));
|
free(((void **)ptr)[-1]);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user