zbd: Fix zoned_block_device_info.zone_size documentation
[fio.git] / lib / memalign.c
index 1d1ba9ba2013ea2c3fdba579931ff1743989cdd7..214a66faca0b3359d8c8ce0050bd173d3de40ad0 100644 (file)
@@ -1,22 +1,24 @@
-#include <stdlib.h>
 #include <assert.h>
-#include <inttypes.h>
+#include <stdlib.h>
 
 #include "memalign.h"
-#include "../fio.h"
+#include "smalloc.h"
+
+#define PTR_ALIGN(ptr, mask)   \
+       (char *)((uintptr_t)((ptr) + (mask)) & ~(mask))
 
 struct align_footer {
        unsigned int offset;
 };
 
-void *fio_memalign(size_t alignment, size_t size)
+void *__fio_memalign(size_t alignment, size_t size, malloc_fn fn)
 {
        struct align_footer *f;
        void *ptr, *ret = NULL;
 
        assert(!(alignment & (alignment - 1)));
 
-       ptr = malloc(size + alignment + size + sizeof(*f) - 1);
+       ptr = fn(size + alignment + sizeof(*f) - 1);
        if (ptr) {
                ret = PTR_ALIGN(ptr, alignment - 1);
                f = ret + size;
@@ -26,9 +28,9 @@ void *fio_memalign(size_t alignment, size_t size)
        return ret;
 }
 
-void fio_memfree(void *ptr, size_t size)
+void __fio_memfree(void *ptr, size_t size, free_fn fn)
 {
        struct align_footer *f = ptr + size;
 
-       free(ptr - f->offset);
+       fn(ptr - f->offset);
 }