66 lines
1.0 KiB
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;
|
|
}
|