110 lines
2.1 KiB
C
110 lines
2.1 KiB
C
#include <libboot/mem/mem.h>
|
|
|
|
int strcmp(const char* a, const char* b)
|
|
{
|
|
while (*a == *b && *a != 0 && *b != 0) {
|
|
a++;
|
|
b++;
|
|
}
|
|
|
|
if (*a < *b) {
|
|
return -1;
|
|
}
|
|
if (*a > *b) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int strncmp(const char* a, const char* b, uint32_t num)
|
|
{
|
|
while (*a == *b && *a != 0 && *b != 0 && num) {
|
|
a++;
|
|
b++;
|
|
num--;
|
|
}
|
|
|
|
if (!num) {
|
|
return 0;
|
|
}
|
|
|
|
if (*a < *b) {
|
|
return -1;
|
|
}
|
|
if (*a > *b) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
size_t strlen(const char* s)
|
|
{
|
|
size_t i = 0;
|
|
while (s[i] != '\0')
|
|
++i;
|
|
return i;
|
|
}
|
|
|
|
size_t strnlen(const char* s, size_t maxlen)
|
|
{
|
|
size_t i = 0;
|
|
while (s[i] != '\0' && maxlen) {
|
|
i++;
|
|
maxlen--;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
void* memset(void* dest, uint8_t fll, uint32_t nbytes)
|
|
{
|
|
for (int i = 0; i < nbytes; ++i) {
|
|
*((uint8_t*)dest + i) = fll;
|
|
}
|
|
return dest;
|
|
}
|
|
|
|
void* memcpy(void* dest, const void* src, uint32_t nbytes)
|
|
{
|
|
for (int i = 0; i < nbytes; ++i) {
|
|
*(char*)(dest + i) = *(char*)(src + i);
|
|
}
|
|
return dest;
|
|
}
|
|
|
|
void* memmove(void* dest, const void* src, uint32_t nbytes)
|
|
{
|
|
if (src > dest) {
|
|
for (int i = 0; i < nbytes; ++i) {
|
|
*((uint8_t*)dest + i) = *((uint8_t*)src + i);
|
|
}
|
|
} else {
|
|
for (int i = nbytes - 1; i >= 0; --i) {
|
|
*((uint8_t*)dest + i) = *((uint8_t*)src + i);
|
|
}
|
|
}
|
|
return dest;
|
|
}
|
|
|
|
void* memccpy(void* dest, const void* src, uint8_t stop, uint32_t nbytes)
|
|
{
|
|
for (int i = 0; i < nbytes; ++i) {
|
|
*((uint8_t*)dest + i) = *((uint8_t*)src + i);
|
|
if (*((uint8_t*)src + i) == stop) {
|
|
return ((uint8_t*)dest + i + 1);
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
int memcmp(const void* src1, const void* src2, uint32_t nbytes)
|
|
{
|
|
for (int i = 0; i < nbytes; ++i) {
|
|
if (*(uint8_t*)(src1 + i) < *((uint8_t*)src2 + i)) {
|
|
return -1;
|
|
}
|
|
if (*(uint8_t*)(src1 + i) > *(uint8_t*)(src2 + i)) {
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
} |