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