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