diff options
Diffstat (limited to 'aligned_memdup.c')
-rw-r--r-- | aligned_memdup.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/aligned_memdup.c b/aligned_memdup.c index d66a846..7b2ca71 100644 --- a/aligned_memdup.c +++ b/aligned_memdup.c @@ -6,9 +6,9 @@ void * libsimple_aligned_memdup(const void *s, size_t alignment, size_t n) { + size_t size = n + (alignment - n % alignment) % alignment; void *ret; - n = n ? n : 1; - ret = aligned_alloc(alignment, n + (alignment - n % alignment) % alignment); + ret = aligned_alloc(alignment, size ? size : alignment); if (!ret) return NULL; return memcpy(ret, s, n); @@ -17,6 +17,7 @@ libsimple_aligned_memdup(const void *s, size_t alignment, size_t n) #else #include "test.h" +#undef memset int main(void) @@ -26,7 +27,7 @@ main(void) void *p = libsimple_aligned_memdup(s, 4, 5); assert(p); assert(p != s); - assert(!((uintptr_t)s % 4)); + assert(!((uintptr_t)p % 4)); if (have_custom_malloc()) { assert((info = get_allocinfo(p))); assert(info->size == 8); |