summaryrefslogtreecommitdiff
path: root/kernel/src/libk
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/libk')
-rw-r--r--kernel/src/libk/math.c7
-rw-r--r--kernel/src/libk/mem.c0
-rw-r--r--kernel/src/libk/string.c43
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);
+}