Merge pull request #34511 from YHNdnzj/strv-extend-strv-consume

basic/strv: introduce strv_extend_strv_consume()
This commit is contained in:
Yu Watanabe
2024-09-21 13:57:02 +09:00
committed by GitHub
29 changed files with 238 additions and 189 deletions
+1 -1
View File
@@ -176,7 +176,7 @@ static int parse_path_many(
return r;
}
return strv_extend_strv(s, f, /* filter_duplicates= */ false);
return strv_extend_strv_consume(s, TAKE_PTR(f), /* filter_duplicates= */ false);
}
static int parse_tries(const char *fname, const char **p, unsigned *ret) {
+23 -29
View File
@@ -18,15 +18,10 @@ int bus_map_id128(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_err
}
int bus_map_strv_sort(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
_cleanup_strv_free_ char **l = NULL;
char ***p = userdata;
char ***p = ASSERT_PTR(userdata);
int r;
r = sd_bus_message_read_strv_extend(m, &l);
if (r < 0)
return bus_log_parse_error_debug(r);
r = strv_extend_strv(p, l, false);
r = sd_bus_message_read_strv_extend(m, p);
if (r < 0)
return bus_log_parse_error_debug(r);
@@ -34,10 +29,13 @@ int bus_map_strv_sort(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus
return 0;
}
static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, unsigned flags, sd_bus_error *error, void *userdata) {
static int map_basic(sd_bus_message *m, unsigned flags, void *userdata) {
char type;
int r;
assert(m);
assert(userdata);
r = sd_bus_message_peek_type(m, &type, NULL);
if (r < 0)
return bus_log_parse_error_debug(r);
@@ -46,32 +44,29 @@ static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, unsigne
case SD_BUS_TYPE_STRING:
case SD_BUS_TYPE_OBJECT_PATH: {
const char **p = userdata;
const char *s;
const char **p = userdata, *s;
r = sd_bus_message_read_basic(m, type, &s);
if (r < 0)
return bus_log_parse_error_debug(r);
if (isempty(s))
s = NULL;
s = empty_to_null(s);
if (flags & BUS_MAP_STRDUP)
return free_and_strdup((char **) userdata, s);
if (FLAGS_SET(flags, BUS_MAP_STRDUP))
return free_and_strdup((char**) p, s);
*p = s;
return 0;
}
case SD_BUS_TYPE_ARRAY: {
_cleanup_strv_free_ char **l = NULL;
char ***p = userdata;
r = sd_bus_message_read_strv_extend(m, &l);
r = sd_bus_message_read_strv_extend(m, p);
if (r < 0)
return bus_log_parse_error_debug(r);
return strv_extend_strv(p, l, false);
return 0;
}
case SD_BUS_TYPE_BOOLEAN: {
@@ -91,40 +86,39 @@ static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, unsigne
case SD_BUS_TYPE_INT32:
case SD_BUS_TYPE_UINT32: {
uint32_t u, *p = userdata;
uint32_t *p = userdata;
r = sd_bus_message_read_basic(m, type, &u);
r = sd_bus_message_read_basic(m, type, p);
if (r < 0)
return bus_log_parse_error_debug(r);
*p = u;
return 0;
}
case SD_BUS_TYPE_INT64:
case SD_BUS_TYPE_UINT64: {
uint64_t t, *p = userdata;
uint64_t *p = userdata;
r = sd_bus_message_read_basic(m, type, &t);
r = sd_bus_message_read_basic(m, type, p);
if (r < 0)
return bus_log_parse_error_debug(r);
*p = t;
return 0;
}
case SD_BUS_TYPE_DOUBLE: {
double d, *p = userdata;
double *p = userdata;
r = sd_bus_message_read_basic(m, type, &d);
r = sd_bus_message_read_basic(m, type, p);
if (r < 0)
return bus_log_parse_error_debug(r);
*p = d;
return 0;
}}
}
return -EOPNOTSUPP;
default:
return -EOPNOTSUPP;
}
}
int bus_message_map_all_properties(
@@ -173,7 +167,7 @@ int bus_message_map_all_properties(
if (map[i].set)
r = prop->set(sd_bus_message_get_bus(m), member, m, error, v);
else
r = map_basic(sd_bus_message_get_bus(m), member, m, flags, error, v);
r = map_basic(m, flags, v);
if (r < 0)
return bus_log_parse_error_debug(r);
+1 -1
View File
@@ -1343,7 +1343,7 @@ int config_parse_strv(
return log_oom();
}
r = strv_extend_strv(sv, strv, /* filter_duplicates = */ ltype);
r = strv_extend_strv_consume(sv, TAKE_PTR(strv), /* filter_duplicates = */ ltype);
if (r < 0)
return log_oom();
+2 -19
View File
@@ -49,25 +49,8 @@ int dlopen_libkmod(void) {
DLSYM_ARG(kmod_validate_resources));
}
static int denylist_modules(const char *p, char ***denylist) {
_cleanup_strv_free_ char **k = NULL;
int r;
assert(p);
assert(denylist);
k = strv_split(p, ",");
if (!k)
return -ENOMEM;
r = strv_extend_strv(denylist, k, /* filter_duplicates= */ true);
if (r < 0)
return r;
return 0;
}
static int parse_proc_cmdline_item(const char *key, const char *value, void *data) {
char ***denylist = ASSERT_PTR(data);
int r;
if (proc_cmdline_key_streq(key, "module_blacklist")) {
@@ -75,7 +58,7 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
if (proc_cmdline_value_missing(key, value))
return 0;
r = denylist_modules(value, data);
r = strv_split_and_extend(denylist, value, ",", /* filter_duplicates = */ true);
if (r < 0)
return r;
}
+13
View File
@@ -208,6 +208,19 @@ static inline int run_test_table(void) {
#define DEFINE_TEST_MAIN(log_level) \
DEFINE_TEST_MAIN_FULL(log_level, NULL, NULL)
#define DECIMAL_STR_FMT(x) _Generic((x), \
char: "%c", \
bool: "%d", \
unsigned char: "%d", \
short: "%hd", \
unsigned short: "%hu", \
int: "%d", \
unsigned: "%u", \
long: "%ld", \
unsigned long: "%lu", \
long long: "%lld", \
unsigned long long: "%llu")
#define ASSERT_OK(expr) \
({ \
typeof(expr) _result = (expr); \
+3 -4
View File
@@ -626,16 +626,15 @@ static int json_dispatch_weight(const char *name, sd_json_variant *variant, sd_j
}
int json_dispatch_user_group_list(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
char ***list = ASSERT_PTR(userdata);
_cleanup_strv_free_ char **l = NULL;
char ***list = userdata;
sd_json_variant *e;
int r;
if (!sd_json_variant_is_array(variant))
return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an array of strings.", strna(name));
sd_json_variant *e;
JSON_VARIANT_ARRAY_FOREACH(e, variant) {
if (!sd_json_variant_is_string(e))
return json_log(e, flags, SYNTHETIC_ERRNO(EINVAL), "JSON array element is not a string.");
@@ -647,7 +646,7 @@ int json_dispatch_user_group_list(const char *name, sd_json_variant *variant, sd
return json_log(e, flags, r, "Failed to append array element: %m");
}
r = strv_extend_strv(list, l, true);
r = strv_extend_strv_consume(list, TAKE_PTR(l), /* filter_duplicates = */ true);
if (r < 0)
return json_log(variant, flags, r, "Failed to merge user/group arrays: %m");