aboutsummaryrefslogtreecommitdiffstats
path: root/aligned_memdup.c
diff options
context:
space:
mode:
Diffstat (limited to 'aligned_memdup.c')
-rw-r--r--aligned_memdup.c7
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);