]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/ordered-set.c
tree-wide: drop 'This file is part of systemd' blurb
[thirdparty/systemd.git] / src / basic / ordered-set.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 /***
3 Copyright 2016 Lennart Poettering
4 ***/
5
6 #include "ordered-set.h"
7 #include "strv.h"
8
9 int ordered_set_consume(OrderedSet *s, void *p) {
10 int r;
11
12 r = ordered_set_put(s, p);
13 if (r <= 0)
14 free(p);
15
16 return r;
17 }
18
19 int ordered_set_put_strdup(OrderedSet *s, const char *p) {
20 char *c;
21 int r;
22
23 assert(s);
24 assert(p);
25
26 c = strdup(p);
27 if (!c)
28 return -ENOMEM;
29
30 r = ordered_set_consume(s, c);
31 if (r == -EEXIST)
32 return 0;
33
34 return r;
35 }
36
37 int ordered_set_put_strdupv(OrderedSet *s, char **l) {
38 int n = 0, r;
39 char **i;
40
41 STRV_FOREACH(i, l) {
42 r = ordered_set_put_strdup(s, *i);
43 if (r < 0)
44 return r;
45
46 n += r;
47 }
48
49 return n;
50 }