#include "string.h" void memcpy(void *dst, const void *src, size_t size) { for (size_t i = 0; i < size; i++) { ((char *)dst)[i] = ((const char *)src)[i]; } } void kmemmove(char *dst, char *src, size_t size) { if (dst == src) return; if (dst > src && dst < src + size) { // s d // copy right-to-left for (; size != 0; size--) { dst[size - 1] = src[size - 1]; } } else { // copy left-to-right for (size_t i = 0; i < size; ++i) { dst[i] = src[i]; } } } int strncmp(const char *s1, const char *s2, size_t size) { while (size && *s1 && *s2 && *s1 == *s2) { size--; s1++; s2++; } if (!size) { return 0; } return (unsigned char)(*s1) - (unsigned char)(*s2); } bool cstr_equal(const char *s1, const char *s2) { while (*s1 && *s2 && *s1 == *s2) { s1++; s2++; } return *s1 == 0 && *s2 == 0; } bool cstr_starts_with(const char *A, const char *B) { while (*A && *B) { if (*A != *B) return false; A++; B++; } return *B == 0; }