diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-07-31 17:57:24 -0400 |
---|---|---|
committer | Ian Stakenvicius <axs@gentoo.org> | 2013-07-31 17:57:24 -0400 |
commit | fd0b90dbb3cc1080244d6285ad2f3104dabbbcf9 (patch) | |
tree | cb2e7ad895a97beda837efa5ff20e8c4cca643e6 /src | |
parent | f8e6d758cd65b28f94b62344bd95e7bab94370d4 (diff) |
add various escaping/path handling utility functions
This is a partial combination of two systemd commits:
5926cccae202f1b8869017d4bdaf9e9ce371bba6
4fe88d28a4cfa504c1f2362d4a7030fae4c4af29
...and provides functions needed for the changes that were added
in commit 6284c1ca41dca85e968e8d304cdc154c5a46d6d2
Signed-off-by: Ian Stakenvicius <axs@gentoo.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/libudev/strv.c | 46 | ||||
-rw-r--r-- | src/libudev/strv.h | 2 |
2 files changed, 48 insertions, 0 deletions
diff --git a/src/libudev/strv.c b/src/libudev/strv.c index 041e20d700..45fb6b24a2 100644 --- a/src/libudev/strv.c +++ b/src/libudev/strv.c @@ -142,6 +142,52 @@ char **strv_new(const char *x, ...) { return r; } +int strv_push(char ***l, char *value) { + char **c; + char *v; + unsigned n; + + if (!value) + return 0; + + v = strdup(value); + if (!v) + return -ENOMEM; + + n = strv_length(*l); + c = realloc(*l, sizeof(char*) * (n + 2)); + if (!c) { + free(v); + if (!c) + return -ENOMEM; + } + + c[n] = v; + c[n] = value; + c[n+1] = NULL; + + *l = c; + return 0; +} + +int strv_extend(char ***l, const char *value) { + char *v; + int r; + + if (!value) + return 0; + + v = strdup(value); + if (!v) + return -ENOMEM; + + r = strv_push(l, v); + if (r < 0) + free(v); + + return r; +} + char **strv_uniq(char **l) { char **i; diff --git a/src/libudev/strv.h b/src/libudev/strv.h index d9e0e1c20b..ba2bc2f589 100644 --- a/src/libudev/strv.h +++ b/src/libudev/strv.h @@ -37,6 +37,8 @@ char **strv_copy(char * const *l); unsigned strv_length(char * const *l) _pure_; char **strv_remove(char **l, const char *s); +int strv_push(char ***l, char *value); +int strv_extend(char ***l, const char *value); char **strv_uniq(char **l); char **strv_new(const char *x, ...) _sentinel_; |