2017-11-18 17:09:20 +01:00
|
|
|
/* SPDX-License-Identifier: LGPL-2.1+ */
|
2017-09-25 17:15:59 +02:00
|
|
|
/***
|
|
|
|
This file is part of systemd.
|
|
|
|
|
|
|
|
Copyright 2017 Lennart Poettering
|
|
|
|
***/
|
|
|
|
|
2018-04-05 07:26:26 +02:00
|
|
|
#include "alloc-util.h"
|
2017-09-25 17:15:59 +02:00
|
|
|
#include "set.h"
|
|
|
|
|
|
|
|
int set_make(Set **ret, const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS, void *add, ...) {
|
|
|
|
_cleanup_set_free_ Set *s = NULL;
|
|
|
|
int r;
|
|
|
|
|
|
|
|
assert(ret);
|
|
|
|
|
|
|
|
s = set_new(hash_ops HASHMAP_DEBUG_PASS_ARGS);
|
|
|
|
if (!s)
|
|
|
|
return -ENOMEM;
|
|
|
|
|
|
|
|
if (add) {
|
|
|
|
va_list ap;
|
|
|
|
|
|
|
|
r = set_put(s, add);
|
|
|
|
if (r < 0)
|
|
|
|
return r;
|
|
|
|
|
|
|
|
va_start(ap, add);
|
|
|
|
|
2017-12-02 01:49:52 +01:00
|
|
|
for (;;) {
|
2017-09-25 17:15:59 +02:00
|
|
|
void *arg = va_arg(ap, void*);
|
|
|
|
|
|
|
|
if (!arg)
|
|
|
|
break;
|
|
|
|
|
|
|
|
r = set_put(s, arg);
|
|
|
|
if (r < 0) {
|
|
|
|
va_end(ap);
|
|
|
|
return r;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
va_end(ap);
|
|
|
|
}
|
|
|
|
|
2018-04-05 07:26:26 +02:00
|
|
|
*ret = TAKE_PTR(s);
|
2017-09-25 17:15:59 +02:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|