]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/strv.h
cgroup: minor optimization
[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);
a740c14c
MS
33static inline void strv_freep(char ***l) {
34 strv_free(*l);
35}
36
93a46b0b 37char **strv_copy(char **l) _malloc_;
60918275
LP
38unsigned strv_length(char **l);
39
034c6ed7 40char **strv_merge(char **a, char **b);
5f9a22c3
LP
41char **strv_merge_concat(char **a, char **b, const char *suffix);
42char **strv_append(char **l, const char *s);
5926ccca 43int strv_extend(char ***l, const char *value);
034c6ed7 44
5f9a22c3 45char **strv_remove(char **l, const char *s);
71ecc858 46char **strv_remove_prefix(char **l, const char *s);
5f9a22c3
LP
47char **strv_uniq(char **l);
48
49#define strv_contains(l, s) (!!strv_find((l), (s)))
cba8922f 50
93a46b0b
LP
51char **strv_new(const char *x, ...) _sentinel_ _malloc_;
52char **strv_new_ap(const char *x, va_list ap) _malloc_;
60918275 53
07719a21
LP
54static inline const char* STRV_IFNOTNULL(const char *x) {
55 return x ? x : (const char *) -1;
56}
57
5f9a22c3
LP
58static inline bool strv_isempty(char **l) {
59 return !l || !*l;
60}
61
93a46b0b
LP
62char **strv_split(const char *s, const char *separator) _malloc_;
63char **strv_split_quoted(const char *s) _malloc_;
26d04f86 64char **strv_split_newlines(const char *s) _malloc_;
5f9a22c3 65
93a46b0b 66char *strv_join(char **l, const char *separator) _malloc_;
5f9a22c3 67
21bc923a 68char **strv_parse_nulstr(const char *s, size_t l);
fabe5c0e 69char **strv_split_nulstr(const char *s);
21bc923a 70
0c85a4f3
LP
71bool strv_overlap(char **a, char **b);
72
60918275 73#define STRV_FOREACH(s, l) \
cba8922f 74 for ((s) = (l); (s) && *(s); (s)++)
60918275
LP
75
76#define STRV_FOREACH_BACKWARDS(s, l) \
77 for (; (l) && ((s) >= (l)); (s)--)
857a493d 78
246aa6dd 79#define STRV_FOREACH_PAIR(x, y, l) \
961e4526 80 for ((x) = (l), (y) = (x+1); (x) && *(x) && *(y); (x) += 2, (y) = (x + 1))
246aa6dd
LP
81
82
857a493d 83char **strv_sort(char **l);
7c2d8094 84void strv_print(char **l);