From 8509784d8000d6791a205626e81b03b3f9bf856b Mon Sep 17 00:00:00 2001 From: Anish Athalye Date: Tue, 8 Oct 2019 21:18:54 -0400 Subject: [PATCH] Add implementations of memcmp and memcpy to ulib This is necessary because gcc may generate calls to memcmp, memset, memcpy, and memmove when compiling with -nostdlib. --- user/ulib.c | 20 ++++++++++++++++++++ user/user.h | 2 ++ 2 files changed, 22 insertions(+) diff --git a/user/ulib.c b/user/ulib.c index ddda0f5..8bfba5d 100644 --- a/user/ulib.c +++ b/user/ulib.c @@ -107,3 +107,23 @@ memmove(void *vdst, const void *vsrc, int n) *dst++ = *src++; return vdst; } + +int +memcmp(const void *s1, const void *s2, uint n) +{ + const char *p1 = s1, *p2 = s2; + while (n-- > 0) { + if (*p1 != *p2) { + return *p1 - *p2; + } + p1++; + p2++; + } + return 0; +} + +void * +memcpy(void *dst, const void *src, uint n) +{ + return memmove(dst, src, n); +} diff --git a/user/user.h b/user/user.h index 03af731..b71ecda 100644 --- a/user/user.h +++ b/user/user.h @@ -38,3 +38,5 @@ void* memset(void*, int, uint); void* malloc(uint); void free(void*); int atoi(const char*); +int memcmp(const void *, const void *, uint); +void *memcpy(void *, const void *, uint);