]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/strv.h
systemctl: honour inhibitors only when running unprivileged
[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);
5926ccca 40int strv_extend(char ***l, const char *value);
034c6ed7 41
5f9a22c3 42char **strv_remove(char **l, const char *s);
71ecc858 43char **strv_remove_prefix(char **l, const char *s);
5f9a22c3
LP
44char **strv_uniq(char **l);
45
46#define strv_contains(l, s) (!!strv_find((l), (s)))
cba8922f 47
93a46b0b
LP
48char **strv_new(const char *x, ...) _sentinel_ _malloc_;
49char **strv_new_ap(const char *x, va_list ap) _malloc_;
60918275 50
07719a21
LP
51static inline const char* STRV_IFNOTNULL(const char *x) {
52 return x ? x : (const char *) -1;
53}
54
5f9a22c3
LP
55static inline bool strv_isempty(char **l) {
56 return !l || !*l;
57}
58
93a46b0b
LP
59char **strv_split(const char *s, const char *separator) _malloc_;
60char **strv_split_quoted(const char *s) _malloc_;
5f9a22c3 61
93a46b0b 62char *strv_join(char **l, const char *separator) _malloc_;
5f9a22c3 63
5b6319dc
LP
64char **strv_env_merge(unsigned n_lists, ...);
65char **strv_env_delete(char **x, unsigned n_lists, ...);
2e6c9e6b 66
ddb26e18 67char **strv_env_set(char **x, const char *p);
7640a5de 68char **strv_env_unset(char **l, const char *p);
ddb26e18 69
fab56fc5
LP
70char *strv_env_get_with_length(char **l, const char *name, size_t k);
71char *strv_env_get(char **x, const char *n);
72
a6ff950e
LP
73char **strv_env_clean(char **l);
74
21bc923a
LP
75char **strv_parse_nulstr(const char *s, size_t l);
76
0c85a4f3
LP
77bool strv_overlap(char **a, char **b);
78
60918275 79#define STRV_FOREACH(s, l) \
cba8922f 80 for ((s) = (l); (s) && *(s); (s)++)
60918275
LP
81
82#define STRV_FOREACH_BACKWARDS(s, l) \
83 for (; (l) && ((s) >= (l)); (s)--)
857a493d
LP
84
85char **strv_sort(char **l);