From 5cd97e44e267faf66f3abb239c70018b8cbcc1d7 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 23 Feb 2023 15:57:33 +0200 Subject: [PATCH] LibC: Add strcmp and strncmp --- libc/Makefile | 2 ++ libc/include/string.h | 3 +++ libc/string/strcmp.cpp | 11 +++++++++++ libc/string/strncmp.cpp | 11 +++++++++++ 4 files changed, 27 insertions(+) create mode 100644 libc/string/strcmp.cpp create mode 100644 libc/string/strncmp.cpp diff --git a/libc/Makefile b/libc/Makefile index 97da9536c..45fbf117c 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -40,6 +40,8 @@ string/memcmp.o \ string/memcpy.o \ string/memmove.o \ string/memset.o \ +string/strcmp.o \ +string/strncmp.o \ string/strcpy.o \ string/strlen.o \ string/strncpy.o \ diff --git a/libc/include/string.h b/libc/include/string.h index 1675097d6..491a36a31 100644 --- a/libc/include/string.h +++ b/libc/include/string.h @@ -11,6 +11,9 @@ void* memmove(void*, const void*, size_t); void* memset(void*, int, size_t); size_t strlen(const char*); +int strcmp(const char*, const char*); +int strncmp(const char*, const char*, size_t); + char* strcpy(char* __restrict, const char* __restrict); char* strncpy(char* __restrict, const char* __restrict, size_t); diff --git a/libc/string/strcmp.cpp b/libc/string/strcmp.cpp new file mode 100644 index 000000000..343d83691 --- /dev/null +++ b/libc/string/strcmp.cpp @@ -0,0 +1,11 @@ +#include + +int strcmp(const char* s1, const char* s2) +{ + const unsigned char* u1 = (unsigned char*)s1; + const unsigned char* u2 = (unsigned char*)s2; + for (; *u1 && *u2; u1++, u2++) + if (*u1 != *u2) + break; + return *u1 - *u2; +} diff --git a/libc/string/strncmp.cpp b/libc/string/strncmp.cpp new file mode 100644 index 000000000..b4cf3b797 --- /dev/null +++ b/libc/string/strncmp.cpp @@ -0,0 +1,11 @@ +#include + +int strncmp(const char* s1, const char* s2, size_t n) +{ + const unsigned char* u1 = (unsigned char*)s1; + const unsigned char* u2 = (unsigned char*)s2; + for (; --n && *u1 && *u2; u1++, u2++) + if (*u1 != *u2) + break; + return *u1 - *u2; +}