utils: Add cstr_token() function
Add an auxiliary cstr_token() function to get a token from a const char string. The function usage syntax is similar to str_token(), but unlike str_token() the function doesn't modify the buffer of the string. Change str_token() function implementation to use cstr_token(). Signed-off-by: Max Stepanov <Max.Stepanov@intel.com> Reviewed-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com> Reviewed-by: Ilan Peer <ilan.peer@intel.com>
This commit is contained in:
parent
e999e56c2c
commit
add5975751
2 changed files with 47 additions and 17 deletions
|
@ -972,6 +972,48 @@ int random_mac_addr_keep_oui(u8 *addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cstr_token - Get next token from const char string
|
||||||
|
* @str: a constant string to tokenize
|
||||||
|
* @delim: a string of delimiters
|
||||||
|
* @last: a pointer to a character following the returned token
|
||||||
|
* It has to be set to NULL for the first call and passed for any
|
||||||
|
* futher call.
|
||||||
|
* Returns: a pointer to token position in str or NULL
|
||||||
|
*
|
||||||
|
* This function is similar to str_token, but it can be used with both
|
||||||
|
* char and const char strings. Differences:
|
||||||
|
* - The str buffer remains unmodified
|
||||||
|
* - The returned token is not a NULL terminated string, but a token
|
||||||
|
* position in str buffer. If a return value is not NULL a size
|
||||||
|
* of the returned token could be calculated as (last - token).
|
||||||
|
*/
|
||||||
|
const char * cstr_token(const char *str, const char *delim, const char **last)
|
||||||
|
{
|
||||||
|
const char *end, *token = str;
|
||||||
|
|
||||||
|
if (!str || !delim || !last)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (*last)
|
||||||
|
token = *last;
|
||||||
|
|
||||||
|
while (*token && os_strchr(delim, *token))
|
||||||
|
token++;
|
||||||
|
|
||||||
|
if (!*token)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
end = token + 1;
|
||||||
|
|
||||||
|
while (*end && !os_strchr(delim, *end))
|
||||||
|
end++;
|
||||||
|
|
||||||
|
*last = end;
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* str_token - Get next token from a string
|
* str_token - Get next token from a string
|
||||||
* @buf: String to tokenize. Note that the string might be modified.
|
* @buf: String to tokenize. Note that the string might be modified.
|
||||||
|
@ -982,25 +1024,12 @@ int random_mac_addr_keep_oui(u8 *addr)
|
||||||
*/
|
*/
|
||||||
char * str_token(char *str, const char *delim, char **context)
|
char * str_token(char *str, const char *delim, char **context)
|
||||||
{
|
{
|
||||||
char *end, *pos = str;
|
char *token = (char *) cstr_token(str, delim, (const char **) context);
|
||||||
|
|
||||||
if (*context)
|
if (token && **context)
|
||||||
pos = *context;
|
*(*context)++ = '\0';
|
||||||
|
|
||||||
while (*pos && os_strchr(delim, *pos))
|
return token;
|
||||||
pos++;
|
|
||||||
if (!*pos)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
end = pos + 1;
|
|
||||||
while (*end && !os_strchr(delim, *end))
|
|
||||||
end++;
|
|
||||||
|
|
||||||
if (*end)
|
|
||||||
*end++ = '\0';
|
|
||||||
|
|
||||||
*context = end;
|
|
||||||
return pos;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -528,6 +528,7 @@ void bin_clear_free(void *bin, size_t len);
|
||||||
int random_mac_addr(u8 *addr);
|
int random_mac_addr(u8 *addr);
|
||||||
int random_mac_addr_keep_oui(u8 *addr);
|
int random_mac_addr_keep_oui(u8 *addr);
|
||||||
|
|
||||||
|
const char * cstr_token(const char *str, const char *delim, const char **last);
|
||||||
char * str_token(char *str, const char *delim, char **context);
|
char * str_token(char *str, const char *delim, char **context);
|
||||||
size_t utf8_escape(const char *inp, size_t in_size,
|
size_t utf8_escape(const char *inp, size_t in_size,
|
||||||
char *outp, size_t out_size);
|
char *outp, size_t out_size);
|
||||||
|
|
Loading…
Reference in a new issue