added memstr and extract_token_str helper functions

This commit is contained in:
Tobias Brunner 2008-12-03 09:45:58 +00:00
parent 0948edbbff
commit 81736d7d24
4 changed files with 57 additions and 2 deletions

View File

@ -76,6 +76,23 @@ void memxor(u_int8_t dest[], u_int8_t src[], size_t n)
}
}
/**
* Described in header.
*/
void *memstr(const void *haystack, const char *needle, size_t n)
{
unsigned const char *pos = haystack;
size_t l = strlen(needle);
for (; n >= l; ++pos, --n)
{
if (memeq(pos, needle, l))
{
return (void*)pos;
}
}
return NULL;
}
/**
* Described in header.
*/

View File

@ -224,6 +224,12 @@ void *clalloc(void *pointer, size_t size);
*/
void memxor(u_int8_t dest[], u_int8_t src[], size_t n);
/**
* A variant of strstr with the characteristics of memchr, where haystack is not
* a null-terminated string but simply a memory area of length n.
*/
void *memstr(const void *haystack, const char *needle, size_t n);
/**
* Creates a directory and all required parent directories.
*

View File

@ -75,6 +75,33 @@ bool extract_token(chunk_t *token, const char termination, chunk_t *src)
return TRUE;
}
/**
* extracts a token ending with the first occurrence of a given null-terminated string
*/
bool extract_token_str(chunk_t *token, const char *termination, chunk_t *src)
{
u_char *eot = memstr(src->ptr, termination, src->len);
size_t l = strlen(termination);
/* initialize empty token */
*token = chunk_empty;
if (eot == NULL) /* termination string not found */
{
return FALSE;
}
/* extract token */
token->ptr = src->ptr;
token->len = (u_int)(eot - src->ptr);
/* advance src pointer after termination string */
src->ptr = eot + l;
src->len -= (token->len + l);
return TRUE;
}
/**
* extracts a token ending with the last occurrence of a given termination symbol
*/

View File

@ -37,12 +37,17 @@ bool eat_whitespace(chunk_t *src);
bool match(const char *pattern, const chunk_t *ch);
/**
* Extracts a token ending with the first occurence a given termination symbol
* Extracts a token ending with the first occurrence of a given termination symbol
*/
bool extract_token(chunk_t *token, const char termination, chunk_t *src);
/**
* Extracts a token ending with the last occurence a given termination symbol
* Extracts a token ending with the first occurrence of a given null-terminated string
*/
bool extract_token_str(chunk_t *token, const char *termination, chunk_t *src);
/**
* Extracts a token ending with the last occurrence of a given termination symbol
*/
bool extract_last_token(chunk_t *token, const char termination, chunk_t *src);