diff --git a/src/kservice.c b/src/kservice.c index 4afea50bcae55eeceb8e4b4338e11f92a6ac7239..7b51f60ca3a48ac9c60eb4ed846a690bef9ee103 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -220,11 +220,20 @@ void *rt_memcpy(void *dst, const void *src, rt_ubase_t count) { #ifdef RT_USING_TINY_SIZE char *tmp = (char *)dst, *s = (char *)src; + rt_ubase_t len; + + if(tmp <= s || tmp > (s + count)) + { + while (count--) + *tmp ++ = *s ++; + } + else + { + for(len = count; len > 0; len --) + tmp[len -1] = s[len - 1]; + } - while (count--) - *tmp++ = *s++; - - return dst; + return dst; #else #define UNALIGNED(X, Y) \