From 263a2ddec4f7f17c5bcd3a36ded396f6fe4e836a Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Tue, 31 Dec 2019 21:56:20 +0100 Subject: copy by one byte in memcpy to avoid alignment faults --- strings.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'strings.c') diff --git a/strings.c b/strings.c index c741938..368d7dc 100644 --- a/strings.c +++ b/strings.c @@ -82,13 +82,9 @@ void memcpy(void *dst, void *src, size_t nbytes) { size_t iter; - // copying by word is faster than by byte - // copy by word as much as possible - for (iter = 0; iter < nbytes / 4; iter++) - ((volatile uint32_t*) dst)[iter] = ((uint32_t*) src)[iter]; - - // copy the remaining 1, 2 or 3 bytes by byte - for (iter *= 4; iter < nbytes; iter++) + // copying by word is faster than by byte, + // but can easily cause alignment faults, so we resign from it... + for (iter = 0; iter < nbytes ; iter++) ((volatile uint8_t*) dst)[iter] = ((uint8_t*) src)[iter]; } -- cgit v1.2.3