All pastes #140885 Raw Edit

Stuff

public text v1 · immutable
#140885 ·published 2006-08-20 18:44 UTC
rendered paste body

void *mem_copy(const void *src, void *dest, size_t count)
{
	const char *sp = (const char *)src;
	char *dp = (char *)dest;
	for(; count != 0; count--) *dp++ = *sp++;
	return dest;
}

void *mem_set(void *dest, char val, size_t count)
{
	char *temp = (char *)dest;
	for( ; count != 0; count--) *temp++ = val;
	return dest;
}

unsigned short *mem_set_word(unsigned short *dest, unsigned short val, size_t count)
{
	unsigned short *temp = (unsigned short *)dest;
	for( ; count != 0; count--) *temp++ = val;
	return dest;
}

size_t string_length(const char *str)
{
	size_t retval;
	for(retval = 0; *str != '\0'; str++) retval++;
	return retval;
}

boolean string_compare(const char *str1, const char *str2)
{
	int strlength = strlen(str1);
	// if they're different lengths they're obviously not the same string
	if (strlength != strlen(str2))
		return false;
	// otherwise, compare each character
	int i;
	for (i = 0; i < strlength; i++)
		if (str1[i] != str2[i])
			return false;

	// if we got this far, they're equal
	return true;
}

boolean string_ncompare(const char *str1, const char *str2, size_t n)
{
	int i;
	for (i = 0; i < n; i++)
		if (str1[i] != str2[i])
			return false;

	// if we got this far, they're equal
	return true;
}

char *string_copy(const char *src, char *dest)
{
	return strncpy(src, dest, strlen(src));
}

char *string_ncopy(const char *src, char *dest, size_t n)
{
	int i;
	for (i = 0; i < n; i++)
		dest[i] = src[i];
	return dest;
}

int string_findchar(char *str, char c)
{
	int i;
	for (i = 0; i < strlen(str); i++)
		if (str[i] == c) return i;
	return NULL;
}

int string_findchar_reverse(char *str, char c)
{
	int i;
	for (i = strlen(str); i > 0; i--)
		if (str[i] == c) return i;
	return NULL;
}

// Can't think of a better name for these.
size_t strspn(const char *s, const char *accept)
{
	const char *p;
	const char *a;
	size_t count = 0;

	for(p = s; *p != '\0'; ++p)
	{
		for(a = accept; *a != '\0'; ++a)
		{
			if(*p == *a)
				break;
		}
		if(*a == '\0')
			return count;
		++count;
	}

	return count;
}

size_t strcspn(const char *str, const char *reject)
{
	int i, j;
	size_t retval = 0;
	for (i = 0; i < strlen(str); i++)
	{
		for (j = 0; j < strlen(reject); j++)
		{
			if (str[i] != reject[j])
				retval++;
			else
				return retval;
		}
	}
}

int strnumtokens(const char *str, char splitchar)
{
	int i;
	int tokens = 1; // all strings have at least one token
	// Actually, what if you split 'a' by 'a'?
	// Actually, why *would* you split 'a' by 'a'?
	for (i = 0; i < strlen(str); i++)
		if (str[i] == splitchar)
			tokens++;
	return tokens;
}

char tmpbuf[1024];

char *strsplit(const char *str, char splitchar, int token_num)
{
	char delimeter[2];
	delimeter[0] = splitchar;
	delimeter[1] = '\0';
	int i;
	string_ncopy(str, tmpbuf, 1024);
	char *token = tmpbuf;
	for (i = 0; *token; i++)
	{
		/* search for delimiters */
		size_t len = strcspn(token, delimeter); 
		/* print the found text: use *.* in format to specify a maximum print size */
		if (i == token_num)
		{
			token[strcspn(token, delimeter)] = '\0';
			return token;
		}
		 /* advance pointer by one more than the length of the found text */
		token += len + 1;
	}
}