trios/libk/string.c

66 lines
1.0 KiB
C

#include <stddef.h>
#include "include/string.h"
int memcmp(const void *lhs, const void *rhs, size_t n) {
const unsigned char *l = lhs;
const unsigned char *r = rhs;
while(n != 0 && *l == *r) {
n--;
l++;
r++;
}
return (n == 0) ? 0 : *l - *r;
}
void *memcpy(void *restrict dst, const void *restrict src, size_t n) {
char *d = dst;
const char *s = src;
while(n--) {
*d++ = *s++;
}
return dst;
}
void *memmove(void *dst, const void *src, size_t n) {
char *d = dst;
const char *s = src;
if(s < d) {
d += n;
s += n;
while(n--) {
*--d = *--s;
}
} else {
while(n--) {
*d++ = *s++;
}
}
return dst;
}
void *memset(void *dest, int c, size_t n) {
unsigned char *d = dest;
while(n--) {
*d++ = c;
}
return dest;
}
char *strcpy(char *restrict dst, const char *restrict src) {
while((*dst = *src) != '\0') {
dst++;
src++;
}
return dst;
}
char *strncpy(char *restrict dst, const char *restrict src, size_t n) {
while((*dst = *src) != '\0' && n != 0) {
dst++;
src++;
n--;
}
memset(dst, 0, n);
return dst;
}