Espresso 0.0.2a
This commit is contained in:
170
lib/string.c
170
lib/string.c
@ -4,7 +4,6 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
||||
extern int32_t sse_initialized;
|
||||
|
||||
size_t strlen(const char* str)
|
||||
@ -184,22 +183,28 @@ char* strchr(const char* s, int c)
|
||||
}
|
||||
|
||||
|
||||
void* memset(void *dst, char c, uint32_t n)
|
||||
void* memset(void* dst, int c, size_t n)
|
||||
{
|
||||
char *temp = dst;
|
||||
for (; n != 0; n--)
|
||||
/*printf("memset(%p, %d, %u)\n", dst, c, n);*/
|
||||
|
||||
unsigned char* temp = (unsigned char*) dst;
|
||||
unsigned char val = (unsigned char) c;
|
||||
|
||||
for (size_t i = 0; i < n; i++)
|
||||
{
|
||||
*temp++ = c;
|
||||
temp[i] = val;
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
|
||||
void* memcpy(void *dst, const void *src, uint32_t n)
|
||||
{
|
||||
if (sse_initialized > 1)
|
||||
/*if (sse_initialized > 1)
|
||||
{
|
||||
return sse2_memcpy(dst, src, n);
|
||||
}
|
||||
}*/
|
||||
|
||||
char *d = dst;
|
||||
const char *s = src;
|
||||
@ -216,7 +221,7 @@ int32_t memcmp(const void *s1, const void *s2, size_t n)
|
||||
const uint8_t *p1 = (const uint8_t *)s1;
|
||||
const uint8_t *p2 = (const uint8_t *)s2;
|
||||
|
||||
printf("p1: %i, p2: %i\n", (int32_t)*p1, (int32_t)*p2);
|
||||
/*printf("p1: %i, p2: %i\n", (int32_t)*p1, (int32_t)*p2);*/
|
||||
|
||||
for (size_t i = 0; i < n; i++)
|
||||
{
|
||||
@ -239,6 +244,34 @@ void* memclr(void* m_start, size_t m_count)
|
||||
return memset(m_start, '\0', (uint32_t)m_count);
|
||||
}
|
||||
|
||||
void* memmove(void* dest, const void* src, size_t n)
|
||||
{
|
||||
unsigned char* d = (unsigned char*) dest;
|
||||
const unsigned char* s = (const unsigned char*) src;
|
||||
|
||||
if (d == s || n == 0)
|
||||
{
|
||||
return dest;
|
||||
}
|
||||
|
||||
if (d < s)
|
||||
{
|
||||
for (size_t i = 0; i < n; i++)
|
||||
{
|
||||
d[i] = s[i];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (size_t i = n; i > 0; i--)
|
||||
{
|
||||
d[i - 1] = s[i - 1];
|
||||
}
|
||||
}
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
int32_t isspace(char c)
|
||||
{
|
||||
return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r';
|
||||
@ -281,3 +314,124 @@ char tolower(char c)
|
||||
{
|
||||
return lower(c);
|
||||
}
|
||||
|
||||
int isprint(int c)
|
||||
{
|
||||
return (c >= 32 && c < 127);
|
||||
}
|
||||
|
||||
void lowers(char* str)
|
||||
{
|
||||
size_t len = strlen(str);
|
||||
|
||||
for (size_t i = 0; i < len; i++)
|
||||
{
|
||||
str[i] = lower(str[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void uppers(char* str)
|
||||
{
|
||||
size_t len = strlen(str);
|
||||
|
||||
for (size_t i = 0; i < len; i++)
|
||||
{
|
||||
str[i] = upper(str[i]);
|
||||
}
|
||||
}
|
||||
|
||||
int atoi(const char *str)
|
||||
{
|
||||
int res = 0, sign = 1;
|
||||
|
||||
while (*str == ' ' || *str == '\t')
|
||||
{
|
||||
str++;
|
||||
}
|
||||
|
||||
if (*str == '-')
|
||||
{
|
||||
sign = -1; str++;
|
||||
}
|
||||
else if (*str == '+')
|
||||
{
|
||||
str++;
|
||||
}
|
||||
|
||||
while (*str >= '0' && *str <= '9')
|
||||
{
|
||||
res = res * 10 + (*str - '0');
|
||||
str++;
|
||||
}
|
||||
|
||||
return res * sign;
|
||||
}
|
||||
|
||||
long atol(const char *str)
|
||||
{
|
||||
long res = 0;
|
||||
int sign = 1;
|
||||
|
||||
while (*str == ' ' || *str == '\t')
|
||||
{
|
||||
str++;
|
||||
}
|
||||
|
||||
if (*str == '-')
|
||||
{
|
||||
sign = -1; str++;
|
||||
}
|
||||
else if (*str == '+')
|
||||
{
|
||||
str++;
|
||||
}
|
||||
|
||||
while (*str >= '0' && *str <= '9')
|
||||
{
|
||||
res = res * 10 + (*str - '0');
|
||||
str++;
|
||||
}
|
||||
|
||||
return res * sign;
|
||||
}
|
||||
|
||||
double atof(const char *str)
|
||||
{
|
||||
double res = 0.0, frac = 0.0;
|
||||
int sign = 1, frac_div = 1;
|
||||
|
||||
while (*str == ' ' || *str == '\t')
|
||||
{
|
||||
str++;
|
||||
}
|
||||
|
||||
if (*str == '-')
|
||||
{
|
||||
sign = -1; str++;
|
||||
}
|
||||
else if (*str == '+')
|
||||
{
|
||||
str++;
|
||||
}
|
||||
|
||||
while (*str >= '0' && *str <= '9')
|
||||
{
|
||||
res = res * 10 + (*str - '0');
|
||||
str++;
|
||||
}
|
||||
|
||||
if (*str == '.')
|
||||
{
|
||||
str++;
|
||||
|
||||
while (*str >= '0' && *str <= '9')
|
||||
{
|
||||
frac = frac * 10 + (*str - '0');
|
||||
frac_div *= 10;
|
||||
str++;
|
||||
}
|
||||
}
|
||||
|
||||
return sign * (res + frac / frac_div);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user