caos-with-snake/lib/string.c

55 lines
1.0 KiB
C

#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;
}