|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [PATCH v2 21/47] 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: The code is copied from FreeBSD code:
freebsd/contrib/ldns/compat/memmove.c
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/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |