Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* Normally compiler builtins are used, but sometimes the compiler calls out |
| 2 | of line code. Based on asm-i386/string.h. |
| 3 | */ |
| 4 | #define _STRING_C |
| 5 | #include <linux/string.h> |
Andi Kleen | 2ee60e17 | 2006-06-26 13:59:44 +0200 | [diff] [blame] | 6 | #include <linux/module.h> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 7 | |
| 8 | #undef memmove |
Paolo Ciarrocchi | e940659 | 2008-02-19 20:53:38 +0100 | [diff] [blame] | 9 | void *memmove(void *dest, const void *src, size_t count) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 10 | { |
Paolo Ciarrocchi | e940659 | 2008-02-19 20:53:38 +0100 | [diff] [blame] | 11 | if (dest < src) { |
| 12 | return memcpy(dest, src, count); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 13 | } else { |
Jan Engelhardt | ade1af7 | 2008-01-30 13:33:23 +0100 | [diff] [blame] | 14 | char *p = dest + count; |
| 15 | const char *s = src + count; |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 16 | while (count--) |
| 17 | *--p = *--s; |
| 18 | } |
| 19 | return dest; |
Paolo Ciarrocchi | e940659 | 2008-02-19 20:53:38 +0100 | [diff] [blame] | 20 | } |
Andi Kleen | 2ee60e17 | 2006-06-26 13:59:44 +0200 | [diff] [blame] | 21 | EXPORT_SYMBOL(memmove); |