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;