resolvectl: several coding style cleanups

Use RET_GATHER(), FOREACH_ARRAY(), and strv_skip().
This commit is contained in:
Yu Watanabe
2024-08-19 11:36:32 +09:00
parent 5703301ada
commit f75ecb9f8b
+57 -68
View File
@@ -761,34 +761,29 @@ invalid:
static int verb_query(int argc, char **argv, void *userdata) {
sd_bus *bus = userdata;
int q, r = 0;
int ret = 0, r;
if (arg_type != 0)
STRV_FOREACH(p, argv + 1) {
q = resolve_record(bus, *p, arg_class, arg_type, true);
if (q < 0)
r = q;
}
STRV_FOREACH(p, strv_skip(argv, 1))
RET_GATHER(ret, resolve_record(bus, *p, arg_class, arg_type, true));
else
STRV_FOREACH(p, argv + 1) {
STRV_FOREACH(p, strv_skip(argv, 1)) {
if (startswith(*p, "dns:"))
q = resolve_rfc4501(bus, *p);
RET_GATHER(ret, resolve_rfc4501(bus, *p));
else {
int family, ifindex;
union in_addr_union a;
q = in_addr_ifindex_from_string_auto(*p, &family, &a, &ifindex);
if (q >= 0)
q = resolve_address(bus, family, &a, ifindex);
r = in_addr_ifindex_from_string_auto(*p, &family, &a, &ifindex);
if (r >= 0)
RET_GATHER(ret, resolve_address(bus, family, &a, ifindex));
else
q = resolve_host(bus, *p);
RET_GATHER(ret, resolve_host(bus, *p));
}
if (q < 0)
r = q;
}
return r;
return ret;
}
static int resolve_service(sd_bus *bus, const char *name, const char *type, const char *domain) {
@@ -1033,18 +1028,15 @@ static int resolve_openpgp(sd_bus *bus, const char *address) {
static int verb_openpgp(int argc, char **argv, void *userdata) {
sd_bus *bus = userdata;
int q, r = 0;
int ret = 0;
if (!FLAGS_SET(arg_json_format_flags, SD_JSON_FORMAT_OFF))
return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Use --json=pretty with --type= to acquire resource record information in JSON format.");
STRV_FOREACH(p, argv + 1) {
q = resolve_openpgp(bus, *p);
if (q < 0)
r = q;
}
STRV_FOREACH(p, strv_skip(argv, 1))
RET_GATHER(ret, resolve_openpgp(bus, *p));
return r;
return ret;
}
static int resolve_tlsa(sd_bus *bus, const char *family, const char *address) {
@@ -1085,25 +1077,25 @@ static bool service_family_is_valid(const char *s) {
static int verb_tlsa(int argc, char **argv, void *userdata) {
sd_bus *bus = userdata;
char **args = argv + 1;
const char *family = "tcp";
int q, r = 0;
char **args;
int ret = 0;
assert(argc >= 2);
if (!FLAGS_SET(arg_json_format_flags, SD_JSON_FORMAT_OFF))
return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Use --json=pretty with --type= to acquire resource record information in JSON format.");
if (service_family_is_valid(argv[1])) {
family = argv[1];
args++;
}
args = strv_skip(argv, 2);
} else
args = strv_skip(argv, 1);
STRV_FOREACH(p, args) {
q = resolve_tlsa(bus, family, *p);
if (q < 0)
r = q;
}
STRV_FOREACH(p, args)
RET_GATHER(ret, resolve_tlsa(bus, family, *p));
return r;
return ret;
}
static int show_statistics(int argc, char **argv, void *userdata) {
@@ -2071,7 +2063,7 @@ static int status_all(sd_bus *bus, StatusMode mode) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL, *reply = NULL;
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
bool empty_line = false;
int r;
int ret = 0, r;
assert(bus);
@@ -2129,41 +2121,34 @@ static int status_all(sd_bus *bus, StatusMode mode) {
typesafe_qsort(infos, n_infos, interface_info_compare);
r = 0;
for (size_t i = 0; i < n_infos; i++) {
int q = status_ifindex(bus, infos[i].index, infos[i].name, mode, &empty_line);
if (q < 0 && r >= 0)
r = q;
}
FOREACH_ARRAY(info, infos, n_infos)
RET_GATHER(ret, status_ifindex(bus, info->index, info->name, mode, &empty_line));
return r;
return ret;
}
static int verb_status(int argc, char **argv, void *userdata) {
sd_bus *bus = userdata;
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
int r = 0;
bool empty_line = false;
int ret = 0;
if (argc > 1) {
bool empty_line = false;
if (argc <= 1)
return status_all(bus, STATUS_ALL);
STRV_FOREACH(ifname, argv + 1) {
int ifindex, q;
STRV_FOREACH(ifname, strv_skip(argv, 1)) {
int ifindex;
ifindex = rtnl_resolve_interface(&rtnl, *ifname);
if (ifindex < 0) {
log_warning_errno(ifindex, "Failed to resolve interface \"%s\", ignoring: %m", *ifname);
continue;
}
q = status_ifindex(bus, ifindex, NULL, STATUS_ALL, &empty_line);
if (q < 0)
r = q;
ifindex = rtnl_resolve_interface(&rtnl, *ifname);
if (ifindex < 0) {
log_warning_errno(ifindex, "Failed to resolve interface \"%s\", ignoring: %m", *ifname);
continue;
}
} else
r = status_all(bus, STATUS_ALL);
return r;
RET_GATHER(ret, status_ifindex(bus, ifindex, NULL, STATUS_ALL, &empty_line));
}
return ret;
}
static int call_dns(sd_bus *bus, char **dns, const BusLocator *locator, sd_bus_error *error, bool extended) {
@@ -2256,11 +2241,12 @@ static int verb_dns(int argc, char **argv, void *userdata) {
if (argc < 3)
return status_ifindex(bus, arg_ifindex, NULL, STATUS_DNS, NULL);
r = call_dns(bus, argv + 2, bus_resolve_mgr, &error, true);
char **args = strv_skip(argv, 2);
r = call_dns(bus, args, bus_resolve_mgr, &error, true);
if (r < 0 && sd_bus_error_has_name(&error, BUS_ERROR_LINK_BUSY)) {
sd_bus_error_free(&error);
r = call_dns(bus, argv + 2, bus_network_mgr, &error, true);
r = call_dns(bus, args, bus_network_mgr, &error, true);
}
if (r < 0) {
if (arg_ifindex_permissive &&
@@ -2336,11 +2322,12 @@ static int verb_domain(int argc, char **argv, void *userdata) {
if (argc < 3)
return status_ifindex(bus, arg_ifindex, NULL, STATUS_DOMAIN, NULL);
r = call_domain(bus, argv + 2, bus_resolve_mgr, &error);
char **args = strv_skip(argv, 2);
r = call_domain(bus, args, bus_resolve_mgr, &error);
if (r < 0 && sd_bus_error_has_name(&error, BUS_ERROR_LINK_BUSY)) {
sd_bus_error_free(&error);
r = call_domain(bus, argv + 2, bus_network_mgr, &error);
r = call_domain(bus, args, bus_network_mgr, &error);
}
if (r < 0) {
if (arg_ifindex_permissive &&
@@ -2609,8 +2596,9 @@ static int call_nta(sd_bus *bus, char **nta, const BusLocator *locator, sd_bus_
static int verb_nta(int argc, char **argv, void *userdata) {
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
sd_bus *bus = ASSERT_PTR(userdata);
int r;
char **args;
bool clear;
int r;
if (argc >= 2) {
r = ifname_mangle(argv[1]);
@@ -2628,10 +2616,11 @@ static int verb_nta(int argc, char **argv, void *userdata) {
/* If only argument is the empty string, then call SetLinkDNSSECNegativeTrustAnchors()
* with an empty list, which will clear the list of domains for an interface. */
clear = strv_equal(argv + 2, STRV_MAKE(""));
args = strv_skip(argv, 2);
clear = strv_equal(args, STRV_MAKE(""));
if (!clear)
STRV_FOREACH(p, argv + 2) {
STRV_FOREACH(p, args) {
r = dns_name_is_valid(*p);
if (r < 0)
return log_error_errno(r, "Failed to validate specified domain %s: %m", *p);
@@ -2641,11 +2630,11 @@ static int verb_nta(int argc, char **argv, void *userdata) {
*p);
}
r = call_nta(bus, clear ? NULL : argv + 2, bus_resolve_mgr, &error);
r = call_nta(bus, clear ? NULL : args, bus_resolve_mgr, &error);
if (r < 0 && sd_bus_error_has_name(&error, BUS_ERROR_LINK_BUSY)) {
sd_bus_error_free(&error);
r = call_nta(bus, clear ? NULL : argv + 2, bus_network_mgr, &error);
r = call_nta(bus, clear ? NULL : args, bus_network_mgr, &error);
}
if (r < 0) {
if (arg_ifindex_permissive &&
@@ -4032,8 +4021,8 @@ static int translate(const char *verb, const char *single_arg, size_t num_args,
*p++ = (char *) verb;
if (single_arg)
*p++ = (char *) single_arg;
for (size_t i = 0; i < num_args; i++)
*p++ = args[i];
FOREACH_ARRAY(arg, args, num_args)
*p++ = *arg;
optind = 0;
return native_main((int) num, fake, bus);