Mercurial > sos > sos
view src/os/string.c @ 124:56447a5e2d2f
Added strtok function, should function just as the C stdlib version does
author | Jonathan Pevarnek <pevarnj@gmail.com> |
---|---|
date | Thu, 23 Jun 2011 10:51:55 -0400 |
parents | aec919038b60 |
children | de391a7d85b1 |
line wrap: on
line source
//returns true if c is a character in the c-string characters, false otherwise static char isChar(const char c, const char *characters); int strcmp(const char *a, const char *b) { while(1) { if(*a - *b) return *a - *b; if(*a == '\0') return 0; a++; b++; } return -1; } void strcpy(char *dest, const char *src) { while((*dest++ = *src++)); } char* strcat(char *dest, const char *src) { char *ret = dest; while(*dest&& *++dest); //get to null in first string while((*dest++ = *src++)); return ret; } void* memcpy(void *dest, const void *src, size_t num) { size_t i; const u8 *from = src; u8 *to = dest; for(i = 0; i < num; i++) to[i] = from[i]; return dest; } void* memset(void *dest, u8 value, size_t num) { size_t i; u8 *ptr = dest; for(i = 0; i < num; i++, ptr++) { *ptr = value; } return dest; } size_t strlen(const char *str) { const char *ptr = str; while(*ptr && *++ptr); return ptr - str; } char *strtok(char *str, const char *delimiters) { static char* last = NULL; char* ret; if(str) last = str; if(!last) return last; //return null if done while(isChar(*last, delimiters)) last++; ret = last; //first non-deliminator character, start of string while(*last && !isChar(*last, delimiters)) last++; if(!*last) last = NULL; else *last++ = '\0'; return ret; } static char isChar(const char c, const char *characters) { while(*characters) { if(*characters == c) return *characters; characters++; } return '\0'; }