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';
}