HhhOS/arch/x86_64/std/string.c
2021-08-17 12:45:35 +03:00

58 lines
1.3 KiB
C

#include <std/string.h>
int memcmp(const void* aptr, const void* bptr, usize size) {
const unsigned char* a = (const unsigned char*) aptr;
const unsigned char* b = (const unsigned char*) bptr;
for (usize i = 0; i < size; i++) {
if (a[i] < b[i])
return -1;
else if (b[i] < a[i])
return 1;
}
return 0;
}
void* memcpy(void* restrict dstptr, const void* restrict srcptr, usize size) {
unsigned char* dst = (unsigned char*) dstptr;
const unsigned char* src = (const unsigned char*) srcptr;
for (usize i = 0; i < size; i++)
dst[i] = src[i];
return dstptr;
}
void* memmove(void* dstptr, const void* srcptr, usize size) {
unsigned char* dst = (unsigned char*) dstptr;
const unsigned char* src = (const unsigned char*) srcptr;
if (dst < src) {
for (usize i = 0; i < size; i++)
dst[i] = src[i];
} else {
for (usize i = size; i != 0; i--)
dst[i-1] = src[i-1];
}
return dstptr;
}
void* memset(void* bufptr, int value, usize size) {
unsigned char* buf = (unsigned char*) bufptr;
for (usize i = 0; i < size; i++)
buf[i] = (unsigned char) value;
return bufptr;
}
usize strlen(const char* str) {
usize len = 0;
while (str[len])
len++;
return len;
}
char* strcpy(char* dst, const char* src) {
return memcpy(dst, src, strlen(src) + 1);
}
char* strcat(char* dst, const char* src) {
strcpy(dst + strlen(dst), src);
return dst;
}