Переглянути джерело

Kernel: Move {strnlen, strcmp, memcmp, strncmp, strstr} to MiniStdLib

This lets the Prekernel also use these simple (and standalone)
C functions.
Idan Horowitz 3 роки тому
батько
коміт
54a12d34eb
2 змінених файлів з 59 додано та 59 видалено
  1. 59 0
      Kernel/MiniStdLib.cpp
  2. 0 59
      Kernel/StdLib.cpp

+ 59 - 0
Kernel/MiniStdLib.cpp

@@ -102,4 +102,63 @@ size_t strlen(const char* str)
         ++len;
     return len;
 }
+
+size_t strnlen(const char* str, size_t maxlen)
+{
+    size_t len = 0;
+    for (; len < maxlen && *str; str++)
+        len++;
+    return len;
+}
+
+int strcmp(const char* s1, const char* s2)
+{
+    for (; *s1 == *s2; ++s1, ++s2) {
+        if (*s1 == 0)
+            return 0;
+    }
+    return *(const u8*)s1 < *(const u8*)s2 ? -1 : 1;
+}
+
+int memcmp(const void* v1, const void* v2, size_t n)
+{
+    auto const* s1 = (const u8*)v1;
+    auto const* s2 = (const u8*)v2;
+    while (n-- > 0) {
+        if (*s1++ != *s2++)
+            return s1[-1] < s2[-1] ? -1 : 1;
+    }
+    return 0;
+}
+
+int strncmp(const char* s1, const char* s2, size_t n)
+{
+    if (!n)
+        return 0;
+    do {
+        if (*s1 != *s2++)
+            return *(const unsigned char*)s1 - *(const unsigned char*)--s2;
+        if (*s1++ == 0)
+            break;
+    } while (--n);
+    return 0;
+}
+
+char* strstr(const char* haystack, const char* needle)
+{
+    char nch;
+    char hch;
+
+    if ((nch = *needle++) != 0) {
+        size_t len = strlen(needle);
+        do {
+            do {
+                if ((hch = *haystack++) == 0)
+                    return nullptr;
+            } while (hch != nch);
+        } while (strncmp(haystack, needle, len) != 0);
+        --haystack;
+    }
+    return const_cast<char*>(haystack);
+}
 }

+ 0 - 59
Kernel/StdLib.cpp

@@ -225,65 +225,6 @@ const void* memmem(const void* haystack, size_t haystack_length, const void* nee
     return AK::memmem(haystack, haystack_length, needle, needle_length);
 }
 
-size_t strnlen(const char* str, size_t maxlen)
-{
-    size_t len = 0;
-    for (; len < maxlen && *str; str++)
-        len++;
-    return len;
-}
-
-int strcmp(const char* s1, const char* s2)
-{
-    for (; *s1 == *s2; ++s1, ++s2) {
-        if (*s1 == 0)
-            return 0;
-    }
-    return *(const u8*)s1 < *(const u8*)s2 ? -1 : 1;
-}
-
-int memcmp(const void* v1, const void* v2, size_t n)
-{
-    auto const* s1 = (const u8*)v1;
-    auto const* s2 = (const u8*)v2;
-    while (n-- > 0) {
-        if (*s1++ != *s2++)
-            return s1[-1] < s2[-1] ? -1 : 1;
-    }
-    return 0;
-}
-
-int strncmp(const char* s1, const char* s2, size_t n)
-{
-    if (!n)
-        return 0;
-    do {
-        if (*s1 != *s2++)
-            return *(const unsigned char*)s1 - *(const unsigned char*)--s2;
-        if (*s1++ == 0)
-            break;
-    } while (--n);
-    return 0;
-}
-
-char* strstr(const char* haystack, const char* needle)
-{
-    char nch;
-    char hch;
-
-    if ((nch = *needle++) != 0) {
-        size_t len = strlen(needle);
-        do {
-            do {
-                if ((hch = *haystack++) == 0)
-                    return nullptr;
-            } while (hch != nch);
-        } while (strncmp(haystack, needle, len) != 0);
-        --haystack;
-    }
-    return const_cast<char*>(haystack);
-}
-
 // Functions that are automatically called by the C++ compiler.
 // Declare them first, to tell the silly compiler that they are indeed being used.
 [[noreturn]] void __stack_chk_fail() __attribute__((used));