diff options
author | Anish Athalye <[email protected]> | 2019-10-08 21:18:54 -0400 |
---|---|---|
committer | Anish Athalye <[email protected]> | 2019-10-08 21:18:54 -0400 |
commit | 8509784d8000d6791a205626e81b03b3f9bf856b (patch) | |
tree | 913f2b02614954284d94a645746a19224fc3200d /user | |
parent | a52d296814d869f16ced4fb68246223b4a64fa38 (diff) | |
download | xv6-labs-8509784d8000d6791a205626e81b03b3f9bf856b.tar.gz xv6-labs-8509784d8000d6791a205626e81b03b3f9bf856b.tar.bz2 xv6-labs-8509784d8000d6791a205626e81b03b3f9bf856b.zip |
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.
Diffstat (limited to 'user')
-rw-r--r-- | user/ulib.c | 20 | ||||
-rw-r--r-- | user/user.h | 2 |
2 files changed, 22 insertions, 0 deletions
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); |