Files
Espresso/libc/string.c

126 lines
1.8 KiB
C
Raw Normal View History

2026-03-20 16:57:08 -05:00
#include <stdint.h>
#include <stddef.h>
#include "include/string.h"
size_t strlen(const char* str)
{
size_t len = 0;
while (str[len])
{
len++;
}
return len;
}
int strcmp(const char *s1, const char *s2)
{
while (*s1 && (*s1 == *s2))
{
s1++;
s2++;
}
return (unsigned char)*s1 - (unsigned char)*s2;
}
int strncmp(const char *s1, const char *s2, size_t n)
{
while (n--)
{
unsigned char c1 = (unsigned char)*s1++;
unsigned char c2 = (unsigned char)*s2++;
if (c1 != c2)
{
return c1 - c2;
}
if (c1 == '\0')
{
break;
}
}
return 0;
}
char* strcpy(char *dst, const char *src)
{
char *ret = dst;
while ((*dst++ = *src++) != 0);
return ret;
}
char* strncpy(char *dest, const char *src, uint32_t n)
{
uint32_t i = 0;
for (; i < n && src[i]; ++i)
{
dest[i] = src[i];
}
for (; i < n; ++i)
{
dest[i] = '\0';
}
return dest;
}
char* strcat(char *dest, const char *src)
{
char *end = dest + strlen(dest);
while (*src)
{
*end++ = *src++;
}
*end = '\0';
return dest;
}
/*char* strdup(const char* s)
{
if (!s)
{
return NULL;
}
size_t len = strlen(s);
char* copy = (char*)malloc(len + 1);
if (!copy)
{
return NULL;
}
memcpy(copy, s, len);
copy[len] = '\0';
return copy;
}*/
void* memset(void* dst, int c, size_t n)
{
unsigned char* temp = (unsigned char*) dst;
unsigned char val = (unsigned char) c;
for (size_t i = 0; i < n; i++)
{
temp[i] = val;
}
return dst;
}
void* memcpy(void *dst, const void *src, uint32_t n)
{
char *d = dst;
const char *s = src;
while (n--)
{
*d++ = *s++;
}
return dst;
}