From d8ccc87fed8a4c588e4ad9279e62925f416d36b3 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 25 Nov 2018 23:05:59 +0100 Subject: Some fixes and add wide-character string duplication functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- aligned_memdup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'aligned_memdup.c') diff --git a/aligned_memdup.c b/aligned_memdup.c index d66a846..ec06c38 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); -- cgit v1.2.3-70-g09d2 From e4dbd976e9522d5fa17139126edf38d654f45b1d Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Fri, 26 Feb 2021 18:23:22 +0100 Subject: Fix tests and libsimple_arraycpy and libsimple_arraymove MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- Makefile | 2 ++ aligned_memdup.c | 3 ++- libsimple/array.h | 4 ++-- test.c | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) (limited to 'aligned_memdup.c') diff --git a/Makefile b/Makefile index 61d07da..cc1c5c9 100644 --- a/Makefile +++ b/Makefile @@ -222,7 +222,9 @@ all: libsimple.a $(TESTS) $(OBJ): $(@:.o=.c) $(HDR) $(TESTS): $(@:=.o) test.o libsimple.a $(TESTS:=.o): $(@:.test.o=.c) $(HDR) test.h + test.o: test.c $(HDR) test.h + $(CC) -c -o $@ test.c $(CFLAGS) -DTEST -O0 -ffreestanding libsimple.a: $(OBJ) $(AR) rc $@ $? diff --git a/aligned_memdup.c b/aligned_memdup.c index ec06c38..7b2ca71 100644 --- a/aligned_memdup.c +++ b/aligned_memdup.c @@ -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); diff --git a/libsimple/array.h b/libsimple/array.h index 3e8eab1..b17966b 100644 --- a/libsimple/array.h +++ b/libsimple/array.h @@ -123,13 +123,13 @@ #endif -#define libsimple_arraycpy(d, s, n) libsimple_memcpy(d, s, (n) * sizeof *(s)) +#define libsimple_arraycpy(d, s, n) memcpy(d, s, (n) * sizeof *(s)) #ifndef arraycpy # define arraycpy(...) libsimple_arraycpy(__VA_ARGS__) #endif -#define libsimple_arraymove(d, s, n) libsimple_memmove(d, s, (n) * sizeof *(s)) +#define libsimple_arraymove(d, s, n) memmove(d, s, (n) * sizeof *(s)) #ifndef arraymove # define arraymove(...) libsimple_arraymove(__VA_ARGS__) #endif diff --git a/test.c b/test.c index 5297987..e5ecf00 100644 --- a/test.c +++ b/test.c @@ -287,7 +287,7 @@ memset(void *s, int c, size_t n) { char *str = s; struct allocinfo *info; - if (just_alloced && s == just_alloced) { + if (s == just_alloced && just_alloced && !c) { info = get_allocinfo(s); info->zeroed = MAX(info->zeroed, n); } -- cgit v1.2.3-70-g09d2