Espresso 0.0.2c
This commit is contained in:
125
libc/string.c
Normal file
125
libc/string.c
Normal file
@ -0,0 +1,125 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user