]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/strv.h
update TODO
[thirdparty/systemd.git] / src / shared / strv.h
CommitLineData
03467c88 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
60918275
LP
2
3#ifndef foostrvhfoo
4#define foostrvhfoo
5
a7334b09
LP
6/***
7 This file is part of systemd.
8
9 Copyright 2010 Lennart Poettering
10
11 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
12 under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 2.1 of the License, or
a7334b09
LP
14 (at your option) any later version.
15
16 systemd is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 19 Lesser General Public License for more details.
a7334b09 20
5430f7f2 21 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23***/
24
15ae422b
LP
25#include <stdarg.h>
26#include <stdbool.h>
27
60918275
LP
28#include "macro.h"
29
30char *strv_find(char **l, const char *name);
a4bfb399
LP
31char *strv_find_prefix(char **l, const char *name);
32
60918275 33void strv_free(char **l);
93a46b0b 34char **strv_copy(char **l) _malloc_;
60918275
LP
35unsigned strv_length(char **l);
36
034c6ed7 37char **strv_merge(char **a, char **b);
5f9a22c3
LP
38char **strv_merge_concat(char **a, char **b, const char *suffix);
39char **strv_append(char **l, const char *s);
034c6ed7 40
5f9a22c3 41char **strv_remove(char **l, const char *s);
71ecc858 42char **strv_remove_prefix(char **l, const char *s);
5f9a22c3
LP
43char **strv_uniq(char **l);
44
45#define strv_contains(l, s) (!!strv_find((l), (s)))
cba8922f 46
93a46b0b
LP
47char **strv_new(const char *x, ...) _sentinel_ _malloc_;
48char **strv_new_ap(const char *x, va_list ap) _malloc_;
60918275 49
5f9a22c3
LP
50static inline bool strv_isempty(char **l) {
51 return !l || !*l;
52}
53
93a46b0b
LP
54char **strv_split(const char *s, const char *separator) _malloc_;
55char **strv_split_quoted(const char *s) _malloc_;
5f9a22c3 56
93a46b0b 57char *strv_join(char **l, const char *separator) _malloc_;
5f9a22c3 58
5b6319dc
LP
59char **strv_env_merge(unsigned n_lists, ...);
60char **strv_env_delete(char **x, unsigned n_lists, ...);
2e6c9e6b 61
ddb26e18 62char **strv_env_set(char **x, const char *p);
7640a5de 63char **strv_env_unset(char **l, const char *p);
ddb26e18 64
fab56fc5
LP
65char *strv_env_get_with_length(char **l, const char *name, size_t k);
66char *strv_env_get(char **x, const char *n);
67
a6ff950e
LP
68char **strv_env_clean(char **l);
69
21bc923a
LP
70char **strv_parse_nulstr(const char *s, size_t l);
71
0c85a4f3
LP
72bool strv_overlap(char **a, char **b);
73
60918275 74#define STRV_FOREACH(s, l) \
cba8922f 75 for ((s) = (l); (s) && *(s); (s)++)
60918275
LP
76
77#define STRV_FOREACH_BACKWARDS(s, l) \
78 for (; (l) && ((s) >= (l)); (s)--)
79
80#endif