diff options
author | Martin Pitt <martin.pitt@ubuntu.com> | 2016-04-12 18:20:13 +0200 |
---|---|---|
committer | Martin Pitt <martin.pitt@ubuntu.com> | 2016-04-12 18:20:13 +0200 |
commit | 025ef1d2264b24e77283d312dede8af01fa050f6 (patch) | |
tree | 3dd77d23d19943926f36cb60b1685a4fb657bc89 /src/basic/strv.c | |
parent | 1116e14c49ac1291eb5e46fcf5e691ef57267b54 (diff) | |
parent | 3c6d8e57e870ed56dbb53ce62f0a3d32de101cd8 (diff) |
Merge pull request #2973 from poettering/search-path
Many fixes, in particular to the install logic
Diffstat (limited to 'src/basic/strv.c')
-rw-r--r-- | src/basic/strv.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/basic/strv.c b/src/basic/strv.c index 8282298dca..97a96e5762 100644 --- a/src/basic/strv.c +++ b/src/basic/strv.c @@ -558,6 +558,42 @@ int strv_extend(char ***l, const char *value) { return strv_consume(l, v); } +int strv_extend_front(char ***l, const char *value) { + size_t n, m; + char *v, **c; + + assert(l); + + /* Like strv_extend(), but prepends rather than appends the new entry */ + + if (!value) + return 0; + + n = strv_length(*l); + + /* Increase and overflow check. */ + m = n + 2; + if (m < n) + return -ENOMEM; + + v = strdup(value); + if (!v) + return -ENOMEM; + + c = realloc_multiply(*l, sizeof(char*), m); + if (!c) { + free(v); + return -ENOMEM; + } + + memmove(c+1, c, n * sizeof(char*)); + c[0] = v; + c[n+1] = NULL; + + *l = c; + return 0; +} + char **strv_uniq(char **l) { char **i; |