quinn-os/string.c
2016-01-28 18:29:09 +10:00

106 lines
1.7 KiB
C

void memset(char *ptr, char value, int len) {
int i;
for (i=0;i<len;i++) {
ptr[i] = value;
}
}
void memcpy(void* dest, void* src, int size)
{
unsigned char *pdest = (unsigned char*) dest;
unsigned char *psrc = (unsigned char*) src;
int loops = (size / sizeof(unsigned int));
for(int index = 0; index < loops; ++index)
{
*((unsigned int*)pdest) = *((unsigned int*)psrc);
pdest += sizeof(unsigned int);
psrc += sizeof(unsigned int);
}
loops = (size % sizeof(unsigned int));
for (int index = 0; index < loops; ++index)
{
*pdest = *psrc;
++pdest;
++psrc;
}
}
char *strncpy(char *dest, char *src, int len) {
char *ptr = src;
char *ptr2 = dest;
int i = 0;
while (*ptr != '\0' && i != len) {
*ptr2 = *ptr;
*(ptr2 + 1) = '\0';
ptr2++;
ptr++;
len++;
}
return dest;
}
char *strcpy(char *dest, char *src) {
char *ptr = src;
char *ptr2 = dest;
while (*ptr != '\0') {
*ptr2 = *ptr;
*(ptr2 + 1) = '\0';
ptr2++;
ptr++;
}
return dest;
}
int strncmp(const char *s1, const char *s2, int n) {
while ((*s1) && (*s1 == *s2) && n > 0) {
--n;
++s1;
++s2;
}
return (*s1 - *s2);
}
int strcmp(const char *s1, const char *s2) {
while ((*s1) && (*s1 == *s2)) {
++s1;
++s2;
}
return (*s1 - *s2);
}
int strlen (char *str) {
int i = 0;
while (*str != '\0') {
str++;
i++;
}
return i;
}
char *strcat(char *dest, char *src) {
char *ptr = dest;
while (*dest != '\0') {
dest++;
}
while (*src != '\0') {
*dest = *src;
dest++;
*dest = '\0';
src++;
}
return ptr;
}
char toupper(char c) {
if (c > 64 && c < 91) {
return c;
} else {
return c - 32;
}
}