]>
Commit | Line | Data |
---|---|---|
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 | ||
7 | int 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 | ||
17 | int 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 | ||
35 | int 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 | |
50 | int 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 | |
68 | void 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 | } |