aboutsummaryrefslogtreecommitdiff
path: root/liberty.c
diff options
context:
space:
mode:
authorPřemysl Janouch <p.janouch@gmail.com>2016-10-09 09:45:27 +0200
committerPřemysl Janouch <p.janouch@gmail.com>2016-10-09 09:45:27 +0200
commit0b77bdeaf9d28c85d8c558bfe7bcd14117a3f943 (patch)
tree6c9280e980135e745327659c36bc94f30536c5bb /liberty.c
parenta34ce0b6b83602e3046a3b62f2670db818954998 (diff)
downloadliberty-0b77bdeaf9d28c85d8c558bfe7bcd14117a3f943.tar.gz
liberty-0b77bdeaf9d28c85d8c558bfe7bcd14117a3f943.tar.xz
liberty-0b77bdeaf9d28c85d8c558bfe7bcd14117a3f943.zip
Merge cstr_split() and cstr_split_ignore_empty()
Diffstat (limited to 'liberty.c')
-rw-r--r--liberty.c27
1 files changed, 7 insertions, 20 deletions
diff --git a/liberty.c b/liberty.c
index 4867fdb..997fae7 100644
--- a/liberty.c
+++ b/liberty.c
@@ -2899,30 +2899,17 @@ base64_encode (const void *data, size_t len, struct str *output)
// --- Utilities ---------------------------------------------------------------
static void
-cstr_split (const char *s, const char *delimiters, struct str_vector *out)
+cstr_split (const char *s, const char *delimiters, bool ignore_empty,
+ struct str_vector *out)
{
const char *begin = s, *end;
while ((end = strpbrk (begin, delimiters)))
{
- str_vector_add_owned (out, xstrndup (begin, end - begin));
- begin = ++end;
- }
- str_vector_add (out, begin);
-}
-
-static void
-cstr_split_ignore_empty (const char *s, char delimiter, struct str_vector *out)
-{
- const char *begin = s, *end;
-
- while ((end = strchr (begin, delimiter)))
- {
- if (begin != end)
+ if (!ignore_empty || begin != end)
str_vector_add_owned (out, xstrndup (begin, end - begin));
begin = ++end;
}
-
- if (*begin)
+ if (!ignore_empty || *begin)
str_vector_add (out, begin);
}
@@ -3219,7 +3206,7 @@ get_xdg_config_dirs (struct str_vector *out)
const char *xdg_config_dirs;
if (!(xdg_config_dirs = getenv ("XDG_CONFIG_DIRS")))
xdg_config_dirs = "/etc/xdg";
- cstr_split_ignore_empty (xdg_config_dirs, ':', out);
+ cstr_split (xdg_config_dirs, ":", true, out);
}
static char *
@@ -3246,7 +3233,7 @@ get_xdg_data_dirs (struct str_vector *out)
const char *xdg_data_dirs;
if (!(xdg_data_dirs = getenv ("XDG_DATA_DIRS")))
xdg_data_dirs = "/usr/local/share/:/usr/share/";
- cstr_split_ignore_empty (xdg_data_dirs, ':', out);
+ cstr_split (xdg_data_dirs, ":", true, out);
}
static char *
@@ -4635,7 +4622,7 @@ config_item_get (struct config_item *self, const char *path, struct error **e)
struct str_vector v;
str_vector_init (&v);
- cstr_split (path, ".", &v);
+ cstr_split (path, ".", false, &v);
struct config_item *result = NULL;
size_t i = 0;