Mercurial > sos > sos
view src/os/string.c @ 126:de391a7d85b1
Created strtok_r, now using it
author | Jonathan Pevarnek <pevarnj@gmail.com> |
---|---|
date | Fri, 24 Jun 2011 10:50:09 -0400 |
parents | 56447a5e2d2f |
children | 2d47a53a5736 |
line wrap: on
line source
#include <string.h> //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; return strtok_r(str, delimiters, &last); } char *strtok_r(char *str, const char *delimiters, char **loc) { char *track = *loc, *ret; if(str) track = str; if(!track) return track; //return null if done while(isChar(*track, delimiters)) track++; ret = track; //first non-deliminator character, start of string while(*track && !isChar(*track, delimiters)) track++; if(!*track) track = NULL; else *track++ = '\0'; *loc = track; return ret; } static char isChar(const char c, const char *characters) { while(*characters) { if(*characters == c) return *characters; characters++; } return '\0'; }