]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/basic/ordered-set.c
Merge pull request #11827 from keszybz/pkgconfig-variables
[thirdparty/systemd.git] / src / basic / ordered-set.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
00616955 2
53ae3f64 3#include "fileio.h"
00616955
LP
4#include "ordered-set.h"
5#include "strv.h"
6
7int ordered_set_consume(OrderedSet *s, void *p) {
8 int r;
9
10 r = ordered_set_put(s, p);
11 if (r <= 0)
12 free(p);
13
14 return r;
15}
16
17int ordered_set_put_strdup(OrderedSet *s, const char *p) {
18 char *c;
19 int r;
20
21 assert(s);
22 assert(p);
23
24 c = strdup(p);
25 if (!c)
26 return -ENOMEM;
27
28 r = ordered_set_consume(s, c);
29 if (r == -EEXIST)
30 return 0;
31
32 return r;
33}
34
35int ordered_set_put_strdupv(OrderedSet *s, char **l) {
36 int n = 0, r;
37 char **i;
38
39 STRV_FOREACH(i, l) {
40 r = ordered_set_put_strdup(s, *i);
41 if (r < 0)
42 return r;
43
44 n += r;
45 }
46
47 return n;
48}
ef79eae0
ZJS
49
50int ordered_set_put_string_set(OrderedSet *s, OrderedSet *l) {
51 int n = 0, r;
52 Iterator i;
53 char *p;
54
55 /* Like ordered_set_put_strv, but for an OrderedSet of strings */
56
57 ORDERED_SET_FOREACH(p, l, i) {
58 r = ordered_set_put_strdup(s, p);
59 if (r < 0)
60 return r;
61
62 n += r;
63 }
64
65 return n;
66}
53ae3f64
ZJS
67
68void ordered_set_print(FILE *f, const char *field, OrderedSet *s) {
69 bool space = false;
70 Iterator i;
71 char *p;
72
73 if (ordered_set_isempty(s))
74 return;
75
76 fputs(field, f);
77
78 ORDERED_SET_FOREACH(p, s, i)
79 fputs_with_space(f, p, NULL, &space);
80
81 fputc('\n', f);
82}