From 87d2719148251a8b14657a2c970b3f85b478c694 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 12 Dec 2022 16:45:30 +0100 Subject: [PATCH] utils: expose pw_split_ip --- src/pipewire/utils.c | 31 +++++++++++++++++++++++++++++++ src/pipewire/utils.h | 3 +++ src/tools/pw-cli.c | 20 -------------------- 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/src/pipewire/utils.c b/src/pipewire/utils.c index 072f47277..1d02714f3 100644 --- a/src/pipewire/utils.c +++ b/src/pipewire/utils.c @@ -97,6 +97,37 @@ char **pw_split_strv(const char *str, const char *delimiter, int max_tokens, int return arr.data; } +/** Split a string in-place based on delimiters + * \param str a string to split + * \param delimiter delimiter characters to split on + * \param max_tokens the max number of tokens to split + * \param[out] tokens an array to hold up to \a max_tokens of strings + * \return the number of tokens in \a tokens + * + * \a str will be modified in-place so that \a tokens will contain zero terminated + * strings split at \a delimiter characters. + */ +SPA_EXPORT +int pw_split_ip(char *str, const char *delimiter, int max_tokens, char *tokens[]) +{ + const char *state = NULL; + char *s, *t; + size_t len, l2; + int n = 0; + + s = (char *)pw_split_walk(str, delimiter, &len, &state); + while (s && n + 1 < max_tokens) { + t = (char*)pw_split_walk(str, delimiter, &l2, &state); + s[len] = '\0'; + tokens[n++] = s; + s = t; + len = l2; + } + if (s) + tokens[n++] = s; + return n; +} + /** Free a NULL terminated array of strings * \param str a NULL terminated array of string * diff --git a/src/pipewire/utils.h b/src/pipewire/utils.h index c04d6ea13..8106710dc 100644 --- a/src/pipewire/utils.h +++ b/src/pipewire/utils.h @@ -58,6 +58,9 @@ pw_split_walk(const char *str, const char *delimiter, size_t *len, const char ** char ** pw_split_strv(const char *str, const char *delimiter, int max_tokens, int *n_tokens); +int +pw_split_ip(char *str, const char *delimiter, int max_tokens, char *tokens[]); + void pw_free_strv(char **str); diff --git a/src/tools/pw-cli.c b/src/tools/pw-cli.c index bb5ab99cb..4dfa8c71b 100644 --- a/src/tools/pw-cli.c +++ b/src/tools/pw-cli.c @@ -142,26 +142,6 @@ static struct global * obj_global(struct remote_data *rd, uint32_t id); static int children_of(struct remote_data *rd, uint32_t parent_id, const char *child_type, uint32_t **children); -static int pw_split_ip(char *str, const char *delimiter, int max_tokens, char *tokens[]) -{ - const char *state = NULL; - char *s, *t; - size_t len, l2; - int n = 0; - - s = (char *)pw_split_walk(str, delimiter, &len, &state); - while (s && n + 1 < max_tokens) { - t = (char*)pw_split_walk(str, delimiter, &l2, &state); - s[len] = '\0'; - tokens[n++] = s; - s = t; - len = l2; - } - if (s) - tokens[n++] = s; - return n; -} - static void print_properties(struct spa_dict *props, char mark, bool header) { const struct spa_dict_item *item;