Files
zinnia/boot/loader/lib.c
T

54 lines
1.1 KiB
C

// SPDX-License-Identifier: ISC
#include <stddef.h>
#include <stdint.h>
#include <string.h>
size_t strlen(const char* str) {
if (!str)
return 0;
size_t len = 0;
while (str[len])
len++;
return len;
}
int memcmp(const void* s1, const void* s2, size_t size) {
const uint8_t* a = s1;
const uint8_t* b = s2;
for (size_t i = 0; i < size; i++) {
if (a[i] != b[i])
return a[i] < b[i] ? -1 : 1;
}
return 0;
}
void* memcpy(void* restrict dest, const void* restrict src, size_t n) {
uint8_t* d = dest;
const uint8_t* s = src;
for (size_t i = 0; i < n; i++)
d[i] = s[i];
return dest;
}
void* memmove(void* dstptr, const void* srcptr, size_t size) {
uint8_t* d = dstptr;
const uint8_t* s = srcptr;
if (d < s) {
for (size_t i = 0; i < size; i++)
d[i] = s[i];
} else {
for (size_t i = size; i > 0; i--)
d[i - 1] = s[i - 1];
}
return dstptr;
}
void* memset(void* dest, int value, size_t n) {
uint8_t* d = dest;
for (size_t i = 0; i < n; i++)
d[i] = (uint8_t)value;
return dest;
}