:: commit 3d67b2278620de20cf4714672866a38e6f5a2dda

xvanc <xvancm@gmail.com> — 2023-09-13 14:22

parents: e77fc9b446

lib/libc: add misc utilities

diff --git a/common/lib/libc.h b/common/lib/libc.h
index 19b50fc9..551d91a1 100644
--- a/common/lib/libc.h
+++ b/common/lib/libc.h
@@ -6,6 +6,8 @@
 
 bool isprint(int c);
 bool isspace(int c);
+bool isalpha(int c);
+bool isdigit(int c);
 
 int toupper(int c);
 int tolower(int c);
@@ -23,6 +25,7 @@ size_t strlen(const char *);
 int strcmp(const char *, const char *);
 int strcasecmp(const char *, const char *);
 int strncmp(const char *, const char *, size_t);
+int strncasecmp(const char *, const char *, size_t);
 int inet_pton(const char *src, void *dst);
 
 #endif
diff --git a/common/lib/libc.s2.c b/common/lib/libc.s2.c
index c3eda16d..11bd4461 100644
--- a/common/lib/libc.s2.c
+++ b/common/lib/libc.s2.c
@@ -12,6 +12,14 @@ bool isspace(int c) {
     return (c >= '\t' && c <= 0xD) || c == ' ';
 }
 
+bool isalpha(int c) {
+    return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+}
+
+bool isdigit(int c) {
+    return c >= '0' && c <= '9';
+}
+
 int toupper(int c) {
     if (c >= 'a' && c <= 'z') {
         return c - 0x20;
@@ -84,6 +92,18 @@ int strncmp(const char *s1, const char *s2, size_t n) {
     return 0;
 }
 
+int strncasecmp(const char *s1, const char *s2, size_t n) {
+    for (size_t i = 0; i < n; i++) {
+        char c1 = s1[i], c2 = s2[i];
+        if (tolower(c1) != tolower(c2))
+            return c1 < c2 ? -1 : 1;
+        if (!c1)
+            return 0;
+    }
+
+    return 0;
+}
+
 size_t strlen(const char *str) {
     size_t len;
 
tab: 248 wrap: offon