diff options
Diffstat (limited to 'kernel/src/libk')
| -rw-r--r-- | kernel/src/libk/math.c | 7 | ||||
| -rw-r--r-- | kernel/src/libk/mem.c | 0 | ||||
| -rw-r--r-- | kernel/src/libk/string.c | 43 |
3 files changed, 50 insertions, 0 deletions
diff --git a/kernel/src/libk/math.c b/kernel/src/libk/math.c new file mode 100644 index 0000000..c2f9c5e --- /dev/null +++ b/kernel/src/libk/math.c @@ -0,0 +1,7 @@ +#include <types.h> + +int64_t abs(int64_t val) +{ + if (val < 0) return -val; + return val; +} diff --git a/kernel/src/libk/mem.c b/kernel/src/libk/mem.c new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/kernel/src/libk/mem.c diff --git a/kernel/src/libk/string.c b/kernel/src/libk/string.c new file mode 100644 index 0000000..a4d0191 --- /dev/null +++ b/kernel/src/libk/string.c @@ -0,0 +1,43 @@ +#include <types.h> + +size_t strlen(const char* s) +{ + char *p = (char*)s; + while (*p) p++; + return p - s; +} + +uint64_t stoi(const char *s) +{ + uint64_t num = 0; + size_t n = strlen(s); + + for (size_t i = 0; i < n; i++) { + num *= 10; + num += s[i] - '0'; + } + + return num; +} + +void strrev(char *s) +{ + size_t n = strlen(s); + char a[100]; + for (size_t i = 0; i < n; i++) { + a[i] = s[n - 1 - i]; + } + for (size_t i = 0; i < n; i++) { + s[i] = a[i]; + } +} + +void itos(uint64_t num, char* s) +{ + size_t i; + for (i = 0; num; num/=10, i++) { + s[i] = '0' + num%10; + } + s[i] = '\0'; + strrev(s); +} |
