From a41e8209be729cd8de34d715135fe84920e8016c Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 19 Nov 2009 02:50:21 +0100 Subject: [PATCH] util: add split_spaces() call --- util.c | 19 +++++++++++++++++++ util.h | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/util.c b/util.c index bcb60848..4bec220f 100644 --- a/util.c +++ b/util.c @@ -145,3 +145,22 @@ int safe_atoi(const char *s, int *ret_i) { *ret_i = (unsigned) l; return 0; } + +/* What is interpreted as whitespace? */ +#define WHITESPACE " \t\n" + +/* Split a string into words. */ +char *split_spaces(const char *c, size_t *l, char **state) { + char *current; + + current = *state ? *state : (char*) c; + + if (!*current || *c == 0) + return NULL; + + current += strspn(current, WHITESPACE); + *l = strcspn(current, WHITESPACE); + *state = current+*l; + + return (char*) current; +} diff --git a/util.h b/util.h index 60dc04e9..9dfe631b 100644 --- a/util.h +++ b/util.h @@ -59,4 +59,9 @@ int parse_boolean(const char *v); int safe_atou(const char *s, unsigned *ret_u); int safe_atoi(const char *s, int *ret_i); +char *split_spaces(const char *c, size_t *l, char **state); + +#define FOREACH_WORD(word, length, s, state) \ + for ((state) = NULL, (word) = split_spaces((s), &(l), &(state)); (word); (word) = split_spaces((s), &(l), &(state))) + #endif -- 2.39.5