diff options
| author | Ada Christine <adachristine18@gmail.com> | 2026-05-26 21:32:27 +0000 |
|---|---|---|
| committer | Ada Christine <adachristine18@gmail.com> | 2026-05-26 21:32:27 +0000 |
| commit | a10aabfcd52f702057316018cd7847ab2bfe4aa1 (patch) | |
| tree | cc4652d2b602798934e8a48b4939cfb20eda1989 /lib/string.c | |
| parent | 90c29fdde317c39384011a6ba97077c138f13ad6 (diff) | |
we're bringing kjarna back and not doing the crazy stuff with trying to have task management during efi. that was a bit extra.kjarna
Diffstat (limited to 'lib/string.c')
| -rw-r--r-- | lib/string.c | 195 |
1 files changed, 0 insertions, 195 deletions
diff --git a/lib/string.c b/lib/string.c deleted file mode 100644 index 2da2070..0000000 --- a/lib/string.c +++ /dev/null @@ -1,195 +0,0 @@ -#include <libc/string.h> -#include <stdbool.h> - -int strcmp(const char *s1, const char *s2) -{ - size_t s1len = strlen(s1); - size_t s2len = strlen(s2); - - return memcmp(s1, s2, s1len < s2len ? s1len : s2len); -} - -size_t strlen(const char *s) -{ - size_t l = 0; - - while (s != nullptr && *s++) l++; - - return l; -} - -size_t wcslen(const wchar_t *s) -{ - size_t l = 0; - - while (s != nullptr && *s++) l++; - - return l; -} - -size_t mbstowcs(wchar_t *dst, const char *src, size_t len) -{ - if (dst == nullptr || src == nullptr) - { - return -1; - } - - size_t i; - - for (i = 0; i < len; i++) - { - if ((dst[i] = src[i]) == 0) - { - break; - } - } - - dst[i] = L'\0'; - - return i; -} - -static long long valueof(int c, int base) -{ - long long result = 0; - - if (base < 2 || base > 36) - { - // bases less than 2 or greater than 36 are invalid. - return -1; - } - - // check if value is an ascii numeric character - if (c >= '0' && c <= '9') - { - // simple as - result = (long long)(c ^ 0x30); - } - - // check if value is an uppercase ASCII alphabetical character - else if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) - { - // mask in uppercase bit - c |= 0x20; - // value is 10 plus the alphabetical order of the character - result = (long long)(10 + c - 'a'); - } - else - { - // character has no valid interpretation under base 36 - return -1LL; - } - - if (result > (base - 1)) - { - // character is not valid under given base - return -1LL; - } - - return result; -} - -unsigned long long strtoull( - const char *restrict begin, - char **restrict end, - int base) -{ - long result = 0; - const char *current = begin; - - // check for empty string - if (*current == 0) - { - if (end) - { - *end = (char *)begin; - return result; - } - } - - // skip initial whitespace - bool whitespace = true; - while (whitespace) - { - switch (*current) - { - case 0x9: - case 0xa: - case 0xb: - case 0xc: - case 0xd: - case 0x20: - current++; - break; - default: - whitespace = false; - } - } - - bool negative = false; - // detect if negative sign is used - if (*current == '-') - { - negative = true; - current++; - } - - // detect base from input - if (base == 0) - { - // base is non-decimal - if (current[0] == 0) - { - if (current[1] == 'b') - { - base = 2; - current += 2; - } - else if (current[1] == 'x') - { - base = 16; - current += 2; - } - else - { - base = 8; - current++; - } - } - // base is decimal otherwise - else - { - base = 10; - } - } - // do the actual conversion now - while (*current) - { - long long value = valueof(*current, base); - - // we've reached the end of the conversion - if (value == -1) - { - break; - } - - result *= base; - result += value; - current++; - } - - // store the end pointer if needed - if (end) - { - *end = (char *)current; - } - - // flip the result if we're meant to - if (negative) - { - result = -result; - } - - return result; -} - |
