added memstr and extract_token_str helper functions
This commit is contained in:
@@ -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.
|
* 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);
|
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.
|
* 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;
|
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
|
* 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);
|
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);
|
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);
|
bool extract_last_token(chunk_t *token, const char termination, chunk_t *src);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user