126 lines
1.8 KiB
C
126 lines
1.8 KiB
C
|
|
#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;
|
||
|
|
}
|