From 86fdfd114f8efde37c8756e2b13fb34099473b43 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 29 Apr 2023 18:48:41 -0300 Subject: [PATCH] string: memcmp() --- kernel-src/include/string.h | 1 + kernel-src/lib/string.c | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/kernel-src/include/string.h b/kernel-src/include/string.h index 3ee28a18..d2c73689 100644 --- a/kernel-src/include/string.h +++ b/kernel-src/include/string.h @@ -10,5 +10,6 @@ void *memcpy(void *dest, void *src, size_t size); void *memset(void *dest, unsigned long what, size_t size); int strcmp(const char *a, const char *b); int strncmp(const char *a, const char *b, size_t c); +int memcmp(const void *a, const void *b, size_t s); #endif diff --git a/kernel-src/lib/string.c b/kernel-src/lib/string.c index ea121713..2272ec70 100644 --- a/kernel-src/lib/string.c +++ b/kernel-src/lib/string.c @@ -6,7 +6,7 @@ void *memcpy(void *d, void *s, size_t c) { uint8_t *sc = (uint8_t *)s; uint8_t *dc = (uint8_t *)d; - while(c--) + while (c--) *dc++ = *sc++; return d; @@ -14,7 +14,7 @@ void *memcpy(void *d, void *s, size_t c) { void *memset(void *ptr, unsigned long value, size_t num) { char *p = (char *)ptr; - while(num--) + while (num--) *p++ = value; return ptr; @@ -29,18 +29,18 @@ char *strcat(char *dest, const char *src) { } int strcmp(const char *a, const char *b) { - while(*a && (*a == *b)) { + while (*a && (*a == *b)) { ++a; ++b; } - return *(const unsigned char *)a - *(const unsigned char *)b; + return *(const unsigned char *)a - *(const unsigned char *)b; } char *strcpy(char *p, const char *s) { const char *temp1 = s; char *temp2 = p; - while(*temp1 != '\0') { + while (*temp1 != '\0') { *temp2 = *temp1; temp1++; temp2++; @@ -52,7 +52,7 @@ char *strcpy(char *p, const char *s) { size_t strlen(const char *a) { size_t s = 0; - while(a[s] != '\0') + while (a[s] != '\0') ++s; return s; @@ -61,8 +61,19 @@ size_t strlen(const char *a) { int strncmp(const char *a, const char *b, size_t c) { int diff = 0; - while(c-- && diff == 0) + while (c-- && diff == 0) diff += *a++ - *b++; return diff; } + +int memcmp(const void *_a, const void *_b, size_t s) { + const uint8_t *a = _a; + const uint8_t *b = _b; + int diff = 0; + + while (s-- && diff == 0) + diff += *a++ - *b++; + + return diff; +}