From 1b640fd27c060959cac862752f9c956c823b4449 Mon Sep 17 00:00:00 2001 From: Eliad Peller Date: Wed, 22 Oct 2014 08:03:58 -0400 Subject: [PATCH] Add str_token() function Add helper function to get the next token from a string. Signed-off-by: Eliad Peller --- src/utils/common.c | 32 ++++++++++++++++++++++++++++++++ src/utils/common.h | 3 ++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/utils/common.c b/src/utils/common.c index 990200491..26c401c70 100644 --- a/src/utils/common.c +++ b/src/utils/common.c @@ -866,3 +866,35 @@ int random_mac_addr_keep_oui(u8 *addr) addr[0] |= 0x02; /* locally administered */ return 0; } + + +/** + * str_token - Get next token from a string + * @buf: String to tokenize. Note that the string might be modified. + * @delim: String of delimiters + * @context: Pointer to save our context. Should be initialized with + * NULL on the first call, and passed for any further call. + * Returns: The next token, NULL if there are no more valid tokens. + */ +char * str_token(char *str, const char *delim, char **context) +{ + char *end, *pos = str; + + if (*context) + pos = *context; + + while (*pos && os_strchr(delim, *pos)) + pos++; + if (!*pos) + return NULL; + + end = pos + 1; + while (*end && !os_strchr(delim, *end)) + end++; + + if (*end) + *end++ = '\0'; + + *context = end; + return pos; +} diff --git a/src/utils/common.h b/src/utils/common.h index 6efe80901..284e7e5cf 100644 --- a/src/utils/common.h +++ b/src/utils/common.h @@ -537,13 +537,14 @@ void int_array_add_unique(int **res, int a); #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) - void str_clear_free(char *str); void bin_clear_free(void *bin, size_t len); int random_mac_addr(u8 *addr); int random_mac_addr_keep_oui(u8 *addr); +char * str_token(char *str, const char *delim, char **context); + /* * gcc 4.4 ends up generating strict-aliasing warnings about some very common