#include "string-util.h"
#include "strv.h"
-char *strv_find(char * const *l, const char *name) {
+char* strv_find(char * const *l, const char *name) {
char * const *i;
assert(name);
return NULL;
}
-char *strv_find_case(char * const *l, const char *name) {
+char* strv_find_case(char * const *l, const char *name) {
char * const *i;
assert(name);
return NULL;
}
-char *strv_find_prefix(char * const *l, const char *name) {
+char* strv_find_prefix(char * const *l, const char *name) {
char * const *i;
assert(name);
return NULL;
}
-char *strv_find_startswith(char * const *l, const char *name) {
+char* strv_find_startswith(char * const *l, const char *name) {
char * const *i, *e;
assert(name);
return NULL;
}
-char **strv_free(char **l) {
- char **k;
-
+char** strv_free(char **l) {
if (!l)
return NULL;
- for (k = l; *k; k++)
+ for (char **k = l; *k; k++)
free(*k);
return mfree(l);
}
-char **strv_free_erase(char **l) {
+char** strv_free_erase(char **l) {
char **i;
STRV_FOREACH(i, l)
return mfree(l);
}
-char **strv_copy(char * const *l) {
+char** strv_copy(char * const *l) {
char **r, **k;
k = r = new(char*, strv_length(l) + 1);
return n;
}
-char **strv_new_ap(const char *x, va_list ap) {
+char** strv_new_ap(const char *x, va_list ap) {
_cleanup_strv_free_ char **a = NULL;
size_t n = 0, i = 0;
va_list aq;
return TAKE_PTR(a);
}
-char **strv_new_internal(const char *x, ...) {
+char** strv_new_internal(const char *x, ...) {
char **r;
va_list ap;
int strv_extend_strv(char ***a, char * const *b, bool filter_duplicates) {
char * const *s, **t;
- size_t p, q, i = 0, j;
+ size_t p, q, i = 0;
assert(a);
*a = t;
STRV_FOREACH(s, b) {
-
if (filter_duplicates && strv_contains(t, *s))
continue;
return (int) i;
rollback:
- for (j = 0; j < i; j++)
+ for (size_t j = 0; j < i; j++)
free(t[p + j]);
t[p] = NULL;
return -ENOMEM;
l[n++] = TAKE_PTR(word);
-
l[n] = NULL;
}
return (int) n;
}
-char *strv_join_full(char * const *l, const char *separator, const char *prefix, bool unescape_separators) {
+char* strv_join_full(char * const *l, const char *separator, const char *prefix, bool unescape_separators) {
char * const *s;
char *r, *e;
size_t n, k, m;
int strv_insert(char ***l, size_t position, char *value) {
char **c;
- size_t n, m, i;
+ size_t n, m;
if (!value)
return 0;
if (!c)
return -ENOMEM;
- for (i = 0; i < position; i++)
+ for (size_t i = 0; i < position; i++)
c[i] = (*l)[i];
c[position] = value;
- for (i = position; i < n; i++)
+ for (size_t i = position; i < n; i++)
c[i+1] = (*l)[i];
-
c[n+1] = NULL;
- free(*l);
- *l = c;
-
- return 0;
+ return free_and_replace(*l, c);
}
int strv_consume(char ***l, char *value) {
return 0;
}
-char **strv_uniq(char **l) {
+char** strv_uniq(char **l) {
char **i;
/* Drops duplicate entries. The first identical string will be
return true;
}
-char **strv_remove(char **l, const char *s) {
+char** strv_remove(char **l, const char *s) {
char **f, **t;
if (!l)
return l;
}
-char **strv_parse_nulstr(const char *s, size_t l) {
+char** strv_parse_nulstr(const char *s, size_t l) {
/* l is the length of the input data, which will be split at NULs into
* elements of the resulting strv. Hence, the number of items in the resulting strv
* will be equal to one plus the number of NUL bytes in the l bytes starting at s,
* empty strings in s.
*/
- const char *p;
size_t c = 0, i = 0;
char **v;
if (l <= 0)
return new0(char*, 1);
- for (p = s; p < s + l; p++)
+ for (const char *p = s; p < s + l; p++)
if (*p == 0)
c++;
if (!v)
return NULL;
- p = s;
- while (p < s + l) {
+ for (const char *p = s; p < s + l; ) {
const char *e;
e = memchr(p, 0, s + l - p);
return v;
}
-char **strv_split_nulstr(const char *s) {
+char** strv_split_nulstr(const char *s) {
const char *i;
char **r = NULL;
return strcmp(*a, *b);
}
-char **strv_sort(char **l) {
+char** strv_sort(char **l) {
typesafe_qsort(l, strv_length(l), str_compare);
return l;
}
return strv_consume(l, x);
}
-char **strv_reverse(char **l) {
- size_t n, i;
+char** strv_reverse(char **l) {
+ size_t n;
n = strv_length(l);
if (n <= 1)
return l;
- for (i = 0; i < n / 2; i++)
+ for (size_t i = 0; i < n / 2; i++)
SWAP_TWO(l[i], l[n-1-i]);
return l;
}
-char **strv_shell_escape(char **l, const char *bad) {
+char** strv_shell_escape(char **l, const char *bad) {
char **s;
/* Escapes every character in every string in l that is in bad,
return false;
}
-char ***strv_free_free(char ***l) {
- char ***i;
-
+char*** strv_free_free(char ***l) {
if (!l)
return NULL;
- for (i = l; *i; i++)
+ for (char ***i = l; *i; i++)
strv_free(*i);
return mfree(l);
}
-char **strv_skip(char **l, size_t n) {
+char** strv_skip(char **l, size_t n) {
while (n > 0) {
if (strv_isempty(l))
}
int strv_extend_n(char ***l, const char *value, size_t n) {
- size_t i, j, k;
+ size_t i, k;
char **nl;
assert(l);
if (!nl[i])
goto rollback;
}
-
nl[i] = NULL;
+
return 0;
rollback:
- for (j = k; j < i; j++)
+ for (size_t j = k; j < i; j++)
free(nl[j]);
-
nl[k] = NULL;
+
return -ENOMEM;
}
#include "macro.h"
#include "string-util.h"
-char *strv_find(char * const *l, const char *name) _pure_;
-char *strv_find_case(char * const *l, const char *name) _pure_;
-char *strv_find_prefix(char * const *l, const char *name) _pure_;
-char *strv_find_startswith(char * const *l, const char *name) _pure_;
+char* strv_find(char * const *l, const char *name) _pure_;
+char* strv_find_case(char * const *l, const char *name) _pure_;
+char* strv_find_prefix(char * const *l, const char *name) _pure_;
+char* strv_find_startswith(char * const *l, const char *name) _pure_;
#define strv_contains(l, s) (!!strv_find((l), (s)))
#define strv_contains_case(l, s) (!!strv_find_case((l), (s)))
-char **strv_free(char **l);
+char** strv_free(char **l);
DEFINE_TRIVIAL_CLEANUP_FUNC(char**, strv_free);
#define _cleanup_strv_free_ _cleanup_(strv_freep)
-char **strv_free_erase(char **l);
+char** strv_free_erase(char **l);
DEFINE_TRIVIAL_CLEANUP_FUNC(char**, strv_free_erase);
#define _cleanup_strv_free_erase_ _cleanup_(strv_free_erasep)
-char **strv_copy(char * const *l);
+char** strv_copy(char * const *l);
size_t strv_length(char * const *l) _pure_;
int strv_extend_strv(char ***a, char * const *b, bool filter_duplicates);
int strv_consume_pair(char ***l, char *a, char *b);
int strv_consume_prepend(char ***l, char *value);
-char **strv_remove(char **l, const char *s);
-char **strv_uniq(char **l);
+char** strv_remove(char **l, const char *s);
+char** strv_uniq(char **l);
bool strv_is_uniq(char * const *l);
int strv_compare(char * const *a, char * const *b);
return strv_compare(a, b) == 0;
}
-char **strv_new_internal(const char *x, ...) _sentinel_;
-char **strv_new_ap(const char *x, va_list ap);
+char** strv_new_internal(const char *x, ...) _sentinel_;
+char** strv_new_ap(const char *x, va_list ap);
#define strv_new(...) strv_new_internal(__VA_ARGS__, NULL)
#define STRV_IGNORE ((const char *) POINTER_MAX)
}
int strv_split_full(char ***t, const char *s, const char *separators, ExtractFlags flags);
-static inline char **strv_split(const char *s, const char *separators) {
+static inline char** strv_split(const char *s, const char *separators) {
char **ret;
if (strv_split_full(&ret, s, separators, 0) < 0)
#define strv_split_and_extend(t, s, sep, dup) strv_split_and_extend_full(t, s, sep, dup, 0)
int strv_split_newlines_full(char ***ret, const char *s, ExtractFlags flags);
-static inline char **strv_split_newlines(const char *s) {
+static inline char** strv_split_newlines(const char *s) {
char **ret;
if (strv_split_newlines_full(&ret, s, 0) < 0)
* string in the vector is an empty string. */
int strv_split_colon_pairs(char ***t, const char *s);
-char *strv_join_full(char * const *l, const char *separator, const char *prefix, bool escape_separtor);
+char* strv_join_full(char * const *l, const char *separator, const char *prefix, bool escape_separtor);
static inline char *strv_join(char * const *l, const char *separator) {
return strv_join_full(l, separator, NULL, false);
}
-char **strv_parse_nulstr(const char *s, size_t l);
-char **strv_split_nulstr(const char *s);
+char** strv_parse_nulstr(const char *s, size_t l);
+char** strv_split_nulstr(const char *s);
int strv_make_nulstr(char * const *l, char **p, size_t *n);
static inline int strv_from_nulstr(char ***a, const char *nulstr) {
#define STRV_FOREACH_PAIR(x, y, l) \
for ((x) = (l), (y) = (x) ? (x+1) : NULL; (x) && *(x) && *(y); (x) += 2, (y) = (x + 1))
-char **strv_sort(char **l);
+char** strv_sort(char **l);
void strv_print(char * const *l);
#define strv_from_stdarg_alloca(first) \
#define FOREACH_STRING(x, y, ...) \
_FOREACH_STRING(UNIQ, x, y, ##__VA_ARGS__)
-char **strv_reverse(char **l);
-char **strv_shell_escape(char **l, const char *bad);
+char** strv_reverse(char **l);
+char** strv_shell_escape(char **l, const char *bad);
bool strv_fnmatch_full(char* const* patterns, const char *s, int flags, size_t *matched_pos);
static inline bool strv_fnmatch(char* const* patterns, const char *s) {
strv_fnmatch_full(patterns, s, flags, NULL);
}
-char ***strv_free_free(char ***l);
+char*** strv_free_free(char ***l);
DEFINE_TRIVIAL_CLEANUP_FUNC(char***, strv_free_free);
-char **strv_skip(char **l, size_t n);
+char** strv_skip(char **l, size_t n);
int strv_extend_n(char ***l, const char *value, size_t n);