refactor: restructure the user space stuff.
[lunaix-os.git] / lunaix-os / usr / libc / src / string.c
diff --git a/lunaix-os/usr/libc/src/string.c b/lunaix-os/usr/libc/src/string.c
new file mode 100644 (file)
index 0000000..726437c
--- /dev/null
@@ -0,0 +1,67 @@
+#include <string.h>
+
+size_t
+strlen(const char* str)
+{
+    size_t len = 0;
+    while (str[len])
+        len++;
+    return len;
+}
+
+const char*
+strchr(const char* str, int character)
+{
+    char c = (char)character;
+    while ((*str)) {
+        if (*str == c) {
+            return str;
+        }
+        str++;
+    }
+    return c == '\0' ? str : NULL;
+}
+
+size_t
+strnlen(const char* str, size_t max_len)
+{
+    size_t len = 0;
+    while (str[len] && len <= max_len)
+        len++;
+    return len;
+}
+
+char*
+strncpy(char* dest, const char* src, size_t n)
+{
+    char c;
+    unsigned int i = 0;
+    while ((c = src[i]) && i <= n)
+        dest[i++] = c;
+    while (i <= n)
+        dest[i++] = 0;
+    return dest;
+}
+
+char*
+strcpy(char* dest, const char* src)
+{
+    char c;
+    unsigned int i = 0;
+    while ((c = src[i])) {
+        dest[i] = c;
+        i++;
+    }
+    dest[i] = '\0';
+    return dest;
+}
+
+int
+strcmp(const char* a, const char* b)
+{
+    while (*a && *a == *b) {
+        a++;
+        b++;
+    }
+    return *a - *b;
+}
\ No newline at end of file