From 48b70f09a87ae5c06e62fc29ecd2d480e8b4198d Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Sun, 27 May 2012 15:45:45 +0200 Subject: [PATCH] software/libbase: fix memcpy handling of buffers with differing alignments --- software/libbase/libc.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/software/libbase/libc.c b/software/libbase/libc.c index 78e3823fe..d0667f1cd 100644 --- a/software/libbase/libc.c +++ b/software/libbase/libc.c @@ -265,6 +265,13 @@ void *memcpy(void *to, const void *from, size_t n) from = cfrom; n--; } + if((long)from & 1) { + char *cto = to; + const char *cfrom = from; + for (; n; n--) + *cto++ = *cfrom++; + return xto; + } if(n > 2 && (long)to & 2) { short *sto = to; const short *sfrom = from; @@ -278,7 +285,7 @@ void *memcpy(void *to, const void *from, size_t n) long *lto = to; const long *lfrom = from; for(; temp; temp--) - *lto++ = *lfrom++; + *lto++ = *lfrom++; to = lto; from = lfrom; }