[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [PATCH 17/40] mini-os: implement the memmove/memchr
This patch is split from the Chen Baozi's old patch: "This activates the ARM code added in the previous patches. On ARM, Mini-OS will boot and display some output on the console. Tested with:" Note: this code is BSD copyright, and the code is originally come from NLnet Labs. Change-Id: Ife7830d4ba6a8b6e3e93622e1a469ae1cf620c39 Jira: ENTOS-247 Signed-off-by: Huang Shijie <shijie.huang@xxxxxxx> --- Makefile | 1 + lib/memmove.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ lib/string.c | 12 ++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 lib/memmove.c diff --git a/Makefile b/Makefile index 88315c4..43075e1 100644 --- a/Makefile +++ b/Makefile @@ -61,6 +61,7 @@ src-y += lib/math.c src-y += lib/printf.c src-y += lib/stack_chk_fail.c src-y += lib/string.c +src-y += lib/memmove.c src-y += lib/sys.c src-y += lib/xmalloc.c src-$(CONFIG_XENBUS) += lib/xs.c diff --git a/lib/memmove.c b/lib/memmove.c new file mode 100644 index 0000000..28f2706 --- /dev/null +++ b/lib/memmove.c @@ -0,0 +1,44 @@ +/* + * memmove.c: memmove compat implementation. + * + * Copyright (c) 2001-2008, NLnet Labs. All rights reserved. + * + * See COPYING for the license. +*/ +#include <os.h> +#include <mini-os/lib.h> + +#ifndef HAVE_LIBC + +void *memmove(void *dest, const void *src, size_t n) +{ + uint8_t* from = (uint8_t*) src; + uint8_t* to = (uint8_t*) dest; + + if (from == to || n == 0) + return dest; + if (to > from && to-from < (int)n) { + /* to overlaps with from */ + /* <from......> */ + /* <to........> */ + /* copy in reverse, to avoid overwriting from */ + int i; + for(i=n-1; i>=0; i--) + to[i] = from[i]; + return dest; + } + if (from > to && from-to < (int)n) { + /* to overlaps with from */ + /* <from......> */ + /* <to........> */ + /* copy forwards, to avoid overwriting from */ + size_t i; + for(i=0; i<n; i++) + to[i] = from[i]; + return dest; + } + memcpy(dest, src, n); + return dest; +} + +#endif diff --git a/lib/string.c b/lib/string.c index 8b24146..c96ca41 100644 --- a/lib/string.c +++ b/lib/string.c @@ -225,4 +225,16 @@ int ffs(int i) return 0; } +void *memchr(const void *s, int c, size_t n) +{ + if (n != 0) { + const unsigned char *p = s; + + do { + if (*p++ == (unsigned char)c) + return ((void *)(uintptr_t)(p - 1)); + } while (--n != 0); + } + return (NULL); +} #endif -- 2.7.4 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/cgi-bin/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |