summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2017-11-02 11:43:26 +0800
committerGitHub <[email protected]>2017-11-02 11:43:26 +0800
commit23582c8129228b4961ad35319cfd2d270039345f (patch)
treece62b7c67835195ae8960a5a2c08dbe837ca7917 /src
parentbb7cf751978f638f353bf7a3a9f29c78eb2c758a (diff)
parentf6b71172b5ad02df522f66ef95ec2b0eb1239a29 (diff)
Merge pull request #942 from flyingcys/master
[Kernel] fix rt_memcpy in RT_USING_TINY_SIZE enable
Diffstat (limited to 'src')
-rw-r--r--src/kservice.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/kservice.c b/src/kservice.c
index 4afea50bca..7b51f60ca3 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) \