| 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); |