X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=bootcensus;a=blobdiff_plain;f=src%2Flibc%2Fstring.c;fp=src%2Flibc%2Fstring.c;h=a651d53c4a8c34eb578f3875826b5fa934ad26da;hp=0000000000000000000000000000000000000000;hb=d1e8a437c1fab4535f82c4c214ec3330ac32e48d;hpb=34ae2440d7cd133051523bce2aac0760cf8296eb diff --git a/src/libc/string.c b/src/libc/string.c new file mode 100644 index 0000000..a651d53 --- /dev/null +++ b/src/libc/string.c @@ -0,0 +1,117 @@ +#include + +void memset(void *s, int c, size_t n) +{ + char *ptr = s; + while(n--) { + *ptr++ = c; + } +} + +/* Does the same thing as memset only with 16bit values. + * n in this case is the number of values, not the number of bytes. + */ +void memset16(void *s, int c, size_t n) +{ + int16_t *ptr = s; + while(n--) { + *ptr++ = c; + } +} + +void *memcpy(void *dest, const void *src, size_t n) +{ + char *dptr = dest; + const char *sptr = src; + + while(n--) { + *dptr++ = *sptr++; + } + return dest; +} + +void *memmove(void *dest, const void *src, size_t n) +{ + int i; + char *dptr; + const char *sptr; + + if(dest <= src) { + /* forward copy */ + dptr = dest; + sptr = src; + for(i=0; i= s) { + if(*ptr == c) { + return (char*)ptr; + } + } + return 0; +} + +char *strstr(const char *str, const char *substr) +{ + while(*str) { + const char *s1 = str; + const char *s2 = substr; + + while(*s1 && *s1 == *s2) { + s1++; + s2++; + } + if(!*s2) { + return (char*)str; + } + str++; + } + return 0; +} + +int strcmp(const char *s1, const char *s2) +{ + while(*s1 && *s1 == *s2) { + s1++; + s2++; + } + return *s1 - *s2; +}