Browse Source

fix rt_memcpy buf in RT_USING_TINY_SIZE enable

flyingcys 7 years ago
parent
commit
f6b71172b5
1 changed files with 13 additions and 4 deletions
  1. 13 4
      src/kservice.c

+ 13 - 4
src/kservice.c

@@ -220,11 +220,20 @@ void *rt_memcpy(void *dst, const void *src, rt_ubase_t count)
 {
 {
 #ifdef RT_USING_TINY_SIZE
 #ifdef RT_USING_TINY_SIZE
     char *tmp = (char *)dst, *s = (char *)src;
     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
 #else
 
 
 #define UNALIGNED(X, Y)                                               \
 #define UNALIGNED(X, Y)                                               \