diff options
author | dzwdz | 2023-06-08 19:52:43 +0200 |
---|---|---|
committer | dzwdz | 2023-06-08 19:52:43 +0200 |
commit | 668655053911072741883fd258c23e9d0668a853 (patch) | |
tree | 182d76120ba9a31926614f190237c5eac998b3a6 /src/user/lib/string | |
parent | 8c1d2e29b9ef3472b46d6997ffde5ca38afdb5f3 (diff) |
libc: move the strto* functions to stdlib.h, where they "belong"
Diffstat (limited to 'src/user/lib/string')
-rw-r--r-- | src/user/lib/string/string.c | 68 |
1 files changed, 1 insertions, 67 deletions
diff --git a/src/user/lib/string/string.c b/src/user/lib/string/string.c index 7058573..28ab523 100644 --- a/src/user/lib/string/string.c +++ b/src/user/lib/string/string.c @@ -1,75 +1,9 @@ #include <ctype.h> #include <errno.h> +#include <stdlib.h> #include <string.h> #include <strings.h> -static unsigned long long -strton(const char *restrict s, char **restrict end, int base, int *sign) -{ - long res = 0; - - while (isspace(*s)) s++; - - if (sign) *sign = 1; - if (*s == '+') { - s++; - } else if (*s == '-') { - s++; - if (sign) *sign = -1; - } - - if (base == 0) { - if (*s == '0') { - s++; - if (*s == 'x' || *s == 'X') { - s++; - base = 16; - } else { - base = 8; - } - } else { - base = 10; - } - } - - for (;;) { - unsigned char digit = *s; - if ('0' <= digit && digit <= '9') digit -= '0'; - else if ('a' <= digit && digit <= 'z') digit -= 'a' - 10; - else if ('A' <= digit && digit <= 'Z') digit -= 'A' - 10; - else break; - - if (digit >= base) break; - // TODO overflow check - res *= base; - res += digit; - - s++; - } - if (end) *end = (void*)s; - return res; -} - -long strtol(const char *restrict s, char **restrict end, int base) { - int sign; - long n = strton(s, end, base, &sign); - return n * sign; -} - -unsigned long strtoul(const char *restrict s, char **restrict end, int base) { - return strton(s, end, base, NULL); -} - -unsigned long long strtoull(const char *restrict s, char **restrict end, int base) { - return strton(s, end, base, NULL); -} - -#include <bits/panic.h> -double strtod(const char *restrict s, char **restrict end) { - (void)s; (void)end; - __libc_panic("unimplemented"); -} - char *strchr(const char *s, int c) { for (; *s; s++) { if (*s == c) return (char *)s; |