Added strchr(3), strchrnul(3), strrchr(3).

This commit is contained in:
Jonas 'Sortie' Termansen 2012-01-08 22:26:32 +01:00
parent 4806f25e50
commit df728efb8c
3 changed files with 37 additions and 2 deletions

View File

@ -37,12 +37,14 @@ int memcmp(const void*, const void*, size_t);
void* memcpy(void* restrict, const void* restrict, size_t);
void* memset(void*, int, size_t);
char* strcat(char* restrict, const char* restrict);
char* strchr(const char*, int);
int strcmp(const char*, const char*);
size_t strcspn(const char*, const char*);
char* strcpy(char* restrict, const char* restrict);
char* strerror(int);
size_t strlen(const char*);
int strncmp(const char*, const char*, size_t);
char* strrchr(const char*, int);
size_t strspn(const char*, const char*);
char* strtok(char* restrict, const char* restrict);
char* strtok_r(char* restrict, const char* restrict, char** restrict);
@ -54,7 +56,6 @@ void* memchr(const void*, int, size_t);
void* memmove(void*, const void*, size_t);
char* stpcpy(char* restrict, const char* restrict);
char* stpncpy(char* restrict, const char* restrict, size_t);
char* strchr(const char*, int);
int strcoll(const char*, const char*);
int strcoll_l(const char*, const char*, locale_t);
char* strdup(const char*);
@ -65,13 +66,16 @@ char* strncpy(char* restrict, const char* restrict, size_t);
char* strndup(const char*, size_t);
size_t strnlen(const char*, size_t);
char* strpbrk(const char*, const char*);
char* strrchr(const char*, int);
char* strsignal(int);
char* strstr(const char*, const char*);
size_t strxfrm(char* restrict, const char* restrict, size_t);
size_t strxfrm_l(char* restrict, const char* restrict, size_t, locale_t);
#endif
#ifdef SORTIX_EXTENSIONS
char* strchrnul(const char* str, int c);
#endif
__END_DECLS
#endif

View File

@ -41,6 +41,9 @@ namespace Maxsi
char* Cat(char* Dest, const char* Src);
char* Tokenize(char* str, const char* delim);
char* TokenizeR(char* str, const char* delim, char** saveptr);
char* Seek(const char* str, int c);
char* SeekNul(const char* str, int c);
char* SeekReverse(const char* str, int c);
int Compare(const char* A, const char* B);
int CompareN(const char* A, const char* B, size_t MaxLength);
bool StartsWith(const char* Haystack, const char* Needle);

View File

@ -155,6 +155,34 @@ namespace Maxsi
return TokenizeR(str, delim, &lasttokensaveptr);
}
DUAL_FUNCTION(char*, strchrnul, SeekNul, (const char* str, int c))
{
while ( *str )
{
if ( *str == c ) { return (char*) str; }
str++;
}
return (char*) str;
}
DUAL_FUNCTION(char*, strrchr, SeekReverse, (const char* str, int c))
{
const char* last = NULL;
while ( *str )
{
if ( *str == c ) { last = str; }
str++;
}
return (char*) last;
}
DUAL_FUNCTION(char*, strchr, Seek, (const char* str, int c))
{
char* result = SeekNul(str, c);
if ( !*result ) { return NULL; }
return result;
}
bool StartsWith(const char* haystack, const char* needle)
{
return CompareN(haystack, needle, Length(needle)) == 0;