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