added memstr and extract_token_str helper functions
This commit is contained in:
parent
0948edbbff
commit
81736d7d24
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue