summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-08-29 17:59:17 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-08-29 18:10:47 +0900
commit98be429243ba1d0505c98c7f64f89076ed5deb85 (patch)
tree6db870e157004b0a62f1d1416a389ae99045acf5
parente1578f608b7a35fbcc3da0016c87900fc3c700a7 (diff)
downloadsystemd-98be429243ba1d0505c98c7f64f89076ed5deb85.tar.gz
sd-netlink: make type_system_get_*() and friends return value directly
-rw-r--r--src/libsystemd/sd-netlink/netlink-genl.c33
-rw-r--r--src/libsystemd/sd-netlink/netlink-message.c121
-rw-r--r--src/libsystemd/sd-netlink/netlink-types-genl.c4
-rw-r--r--src/libsystemd/sd-netlink/netlink-types-nfnl.c11
-rw-r--r--src/libsystemd/sd-netlink/netlink-types-rtnl.c4
-rw-r--r--src/libsystemd/sd-netlink/netlink-types.c76
-rw-r--r--src/libsystemd/sd-netlink/netlink-types.h17
7 files changed, 121 insertions, 145 deletions
diff --git a/src/libsystemd/sd-netlink/netlink-genl.c b/src/libsystemd/sd-netlink/netlink-genl.c
index 3564ece7f4..f6f13ae239 100644
--- a/src/libsystemd/sd-netlink/netlink-genl.c
+++ b/src/libsystemd/sd-netlink/netlink-genl.c
@@ -191,16 +191,13 @@ static int genl_family_new(
return 0;
}
-static int genl_family_get_type_system(const GenericNetlinkFamily *family, const NLTypeSystem **ret) {
+static const NLTypeSystem *genl_family_get_type_system(const GenericNetlinkFamily *family) {
assert(family);
- assert(ret);
- if (family->type_system) {
- *ret = family->type_system;
- return 0;
- }
+ if (family->type_system)
+ return family->type_system;
- return genl_get_type_system_by_name(family->name, ret);
+ return genl_get_type_system_by_name(family->name);
}
static int genl_message_new(
@@ -218,9 +215,9 @@ static int genl_message_new(
assert(family);
assert(ret);
- r = genl_family_get_type_system(family, &type_system);
- if (r < 0)
- return r;
+ type_system = genl_family_get_type_system(family);
+ if (!type_system)
+ return -EOPNOTSUPP;
r = message_new_full(nl, family->id, type_system,
sizeof(struct genlmsghdr) + family->additional_header_size, &m);
@@ -252,9 +249,9 @@ static int genl_family_get_by_name_internal(
assert(name);
assert(ret);
- r = genl_get_type_system_by_name(name, &type_system);
- if (r < 0)
- return r;
+ type_system = genl_get_type_system_by_name(name);
+ if (!type_system)
+ return -EOPNOTSUPP;
r = genl_message_new(nl, ctrl, CTRL_CMD_GETFAMILY, &req);
if (r < 0)
@@ -340,9 +337,13 @@ int genl_get_type_system_and_header_size(
return r;
if (ret_type_system) {
- r = genl_family_get_type_system(f, ret_type_system);
- if (r < 0)
- return r;
+ const NLTypeSystem *t;
+
+ t = genl_family_get_type_system(f);
+ if (!t)
+ return -EOPNOTSUPP;
+
+ *ret_type_system = t;
}
if (ret_header_size)
*ret_header_size = sizeof(struct genlmsghdr) + f->additional_header_size;
diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c
index 0c9b5454b6..e422d5699c 100644
--- a/src/libsystemd/sd-netlink/netlink-message.c
+++ b/src/libsystemd/sd-netlink/netlink-message.c
@@ -215,13 +215,12 @@ static int add_rtattr(sd_netlink_message *m, unsigned short type, const void *da
static int message_attribute_has_type(sd_netlink_message *m, size_t *out_size, uint16_t attribute_type, uint16_t data_type) {
const NLType *type;
- int r;
assert(m);
- r = type_system_get_type(m->containers[m->n_containers].type_system, &type, attribute_type);
- if (r < 0)
- return r;
+ type = type_system_get_type(m->containers[m->n_containers].type_system, attribute_type);
+ if (!type)
+ return -EOPNOTSUPP;
if (type_get_type(type) != data_type)
return -EINVAL;
@@ -584,23 +583,23 @@ int sd_netlink_message_open_container(sd_netlink_message *m, unsigned short type
if (r < 0)
return r;
- r = type_system_get_type_system_union(m->containers[m->n_containers].type_system, &type_system_union, type);
- if (r < 0)
- return r;
+ type_system_union = type_system_get_type_system_union(
+ m->containers[m->n_containers].type_system,
+ type);
+ if (!type_system_union)
+ return -EOPNOTSUPP;
- r = type_system_union_get_type_system_by_protocol(
+ m->containers[m->n_containers + 1].type_system =
+ type_system_union_get_type_system_by_protocol(
type_system_union,
- &m->containers[m->n_containers + 1].type_system,
family);
- if (r < 0)
- return r;
- } else {
- r = type_system_get_type_system(m->containers[m->n_containers].type_system,
- &m->containers[m->n_containers + 1].type_system,
- type);
- if (r < 0)
- return r;
- }
+ } else
+ m->containers[m->n_containers + 1].type_system =
+ type_system_get_type_system(
+ m->containers[m->n_containers].type_system,
+ type);
+ if (!m->containers[m->n_containers + 1].type_system)
+ return -EOPNOTSUPP;
r = add_rtattr(m, type | NLA_F_NESTED, NULL, size);
if (r < 0)
@@ -619,16 +618,18 @@ int sd_netlink_message_open_container_union(sd_netlink_message *m, unsigned shor
assert_return(!m->sealed, -EPERM);
assert_return(m->n_containers < (NETLINK_CONTAINER_DEPTH - 1), -ERANGE);
- r = type_system_get_type_system_union(m->containers[m->n_containers].type_system, &type_system_union, type);
- if (r < 0)
- return r;
+ type_system_union = type_system_get_type_system_union(
+ m->containers[m->n_containers].type_system,
+ type);
+ if (!type_system_union)
+ return -EOPNOTSUPP;
- r = type_system_union_get_type_system_by_string(
+ m->containers[m->n_containers + 1].type_system =
+ type_system_union_get_type_system_by_string(
type_system_union,
- &m->containers[m->n_containers + 1].type_system,
key);
- if (r < 0)
- return r;
+ if (!m->containers[m->n_containers + 1].type_system)
+ return -EOPNOTSUPP;
r = sd_netlink_message_append_string(m, type_system_union_get_match_attribute(type_system_union), key);
if (r < 0)
@@ -1043,24 +1044,24 @@ int sd_netlink_message_read_strv(sd_netlink_message *m, unsigned short container
assert_return(m, -EINVAL);
assert_return(m->n_containers < NETLINK_CONTAINER_DEPTH, -EINVAL);
- r = type_system_get_type(m->containers[m->n_containers].type_system,
- &nl_type,
- container_type);
- if (r < 0)
- return r;
+ nl_type = type_system_get_type(
+ m->containers[m->n_containers].type_system,
+ container_type);
+ if (!nl_type)
+ return -EOPNOTSUPP;
if (type_get_type(nl_type) != NETLINK_TYPE_NESTED)
return -EINVAL;
- r = type_system_get_type_system(m->containers[m->n_containers].type_system,
- &type_system,
- container_type);
- if (r < 0)
- return r;
+ type_system = type_system_get_type_system(
+ m->containers[m->n_containers].type_system,
+ container_type);
+ if (!type_system)
+ return -EOPNOTSUPP;
- r = type_system_get_type(type_system, &nl_type, type_id);
- if (r < 0)
- return r;
+ nl_type = type_system_get_type(type_system, type_id);
+ if (!nl_type)
+ return -EOPNOTSUPP;
if (type_get_type(nl_type) != NETLINK_TYPE_STRING)
return -EINVAL;
@@ -1139,28 +1140,28 @@ int sd_netlink_message_enter_container(sd_netlink_message *m, unsigned short typ
assert_return(m, -EINVAL);
assert_return(m->n_containers < (NETLINK_CONTAINER_DEPTH - 1), -EINVAL);
- r = type_system_get_type(m->containers[m->n_containers].type_system,
- &nl_type,
- type_id);
- if (r < 0)
- return r;
+ nl_type = type_system_get_type(
+ m->containers[m->n_containers].type_system,
+ type_id);
+ if (!nl_type)
+ return -EOPNOTSUPP;
type = type_get_type(nl_type);
if (type == NETLINK_TYPE_NESTED) {
- r = type_system_get_type_system(m->containers[m->n_containers].type_system,
- &type_system,
- type_id);
- if (r < 0)
- return r;
+ type_system = type_system_get_type_system(
+ m->containers[m->n_containers].type_system,
+ type_id);
+ if (!type_system)
+ return -EOPNOTSUPP;
} else if (type == NETLINK_TYPE_UNION) {
const NLTypeSystemUnion *type_system_union;
- r = type_system_get_type_system_union(m->containers[m->n_containers].type_system,
- &type_system_union,
- type_id);
- if (r < 0)
- return r;
+ type_system_union = type_system_get_type_system_union(
+ m->containers[m->n_containers].type_system,
+ type_id);
+ if (!type_system_union)
+ return -EOPNOTSUPP;
switch (type_system_union_get_match_type(type_system_union)) {
case NL_MATCH_SIBLING: {
@@ -1173,12 +1174,11 @@ int sd_netlink_message_enter_container(sd_netlink_message *m, unsigned short typ
if (r < 0)
return r;
- r = type_system_union_get_type_system_by_string(
+ type_system = type_system_union_get_type_system_by_string(
type_system_union,
- &type_system,
key);
- if (r < 0)
- return r;
+ if (!type_system)
+ return -EOPNOTSUPP;
break;
}
@@ -1189,12 +1189,11 @@ int sd_netlink_message_enter_container(sd_netlink_message *m, unsigned short typ
if (r < 0)
return r;
- r = type_system_union_get_type_system_by_protocol(
+ type_system = type_system_union_get_type_system_by_protocol(
type_system_union,
- &type_system,
family);
- if (r < 0)
- return r;
+ if (!type_system)
+ return -EOPNOTSUPP;
break;
}
diff --git a/src/libsystemd/sd-netlink/netlink-types-genl.c b/src/libsystemd/sd-netlink/netlink-types-genl.c
index dde682f626..0e8783b498 100644
--- a/src/libsystemd/sd-netlink/netlink-types-genl.c
+++ b/src/libsystemd/sd-netlink/netlink-types-genl.c
@@ -229,6 +229,6 @@ static const NLTypeSystemUnionElement genl_type_systems[] = {
/* This is the root type system union, so match_attribute is not necessary. */
DEFINE_TYPE_SYSTEM_UNION_MATCH_SIBLING(genl, 0);
-int genl_get_type_system_by_name(const char *name, const NLTypeSystem **ret) {
- return type_system_union_get_type_system_by_string(&genl_type_system_union, ret, name);
+const NLTypeSystem *genl_get_type_system_by_name(const char *name) {
+ return type_system_union_get_type_system_by_string(&genl_type_system_union, name);
}
diff --git a/src/libsystemd/sd-netlink/netlink-types-nfnl.c b/src/libsystemd/sd-netlink/netlink-types-nfnl.c
index 68e5395fea..1ba134a976 100644
--- a/src/libsystemd/sd-netlink/netlink-types-nfnl.c
+++ b/src/libsystemd/sd-netlink/netlink-types-nfnl.c
@@ -186,13 +186,12 @@ static const NLType nfnl_types[] = {
DEFINE_TYPE_SYSTEM(nfnl);
-int nfnl_get_type(uint16_t nlmsg_type, const NLType **ret) {
+const NLType *nfnl_get_type(uint16_t nlmsg_type) {
const NLTypeSystem *subsys;
- int r;
- r = type_system_get_type_system(&nfnl_type_system, &subsys, nlmsg_type >> 8);
- if (r < 0)
- return r;
+ subsys = type_system_get_type_system(&nfnl_type_system, nlmsg_type >> 8);
+ if (!subsys)
+ return NULL;
- return type_system_get_type(subsys, ret, nlmsg_type & ((1U << 8) - 1));
+ return type_system_get_type(subsys, nlmsg_type & ((1U << 8) - 1));
}
diff --git a/src/libsystemd/sd-netlink/netlink-types-rtnl.c b/src/libsystemd/sd-netlink/netlink-types-rtnl.c
index dacd7517a0..75046e98a9 100644
--- a/src/libsystemd/sd-netlink/netlink-types-rtnl.c
+++ b/src/libsystemd/sd-netlink/netlink-types-rtnl.c
@@ -867,6 +867,6 @@ static const NLType rtnl_types[] = {
DEFINE_TYPE_SYSTEM(rtnl);
-int rtnl_get_type(uint16_t nlmsg_type, const NLType **ret) {
- return type_system_get_type(&rtnl_type_system, ret, nlmsg_type);
+const NLType *rtnl_get_type(uint16_t nlmsg_type) {
+ return type_system_get_type(&rtnl_type_system, nlmsg_type);
}
diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c
index 7d6caf004b..051dac95c2 100644
--- a/src/libsystemd/sd-netlink/netlink-types.c
+++ b/src/libsystemd/sd-netlink/netlink-types.c
@@ -50,11 +50,6 @@ const NLTypeSystemUnion *type_get_type_system_union(const NLType *nl_type) {
return nl_type->type_system_union;
}
-uint16_t type_system_get_count(const NLTypeSystem *type_system) {
- assert(type_system);
- return type_system->count;
-}
-
int type_system_root_get_type_system_and_header_size(
sd_netlink *nl,
uint16_t type,
@@ -62,27 +57,26 @@ int type_system_root_get_type_system_and_header_size(
size_t *ret_header_size) {
const NLType *nl_type;
- int r;
assert(nl);
if (IN_SET(type, NLMSG_DONE, NLMSG_ERROR))
- r = type_system_get_type(&basic_type_system, &nl_type, type);
+ nl_type = type_system_get_type(&basic_type_system, type);
else
switch(nl->protocol) {
case NETLINK_ROUTE:
- r = rtnl_get_type(type, &nl_type);
+ nl_type = rtnl_get_type(type);
break;
case NETLINK_NETFILTER:
- r = nfnl_get_type(type, &nl_type);
+ nl_type = nfnl_get_type(type);
break;
case NETLINK_GENERIC:
return genl_get_type_system_and_header_size(nl, type, ret_type_system, ret_header_size);
default:
return -EOPNOTSUPP;
}
- if (r < 0)
- return r;
+ if (!nl_type)
+ return -EOPNOTSUPP;
if (type_get_type(nl_type) != NETLINK_TYPE_NESTED)
return -EOPNOTSUPP;
@@ -94,51 +88,41 @@ int type_system_root_get_type_system_and_header_size(
return 0;
}
-int type_system_get_type(const NLTypeSystem *type_system, const NLType **ret, uint16_t type) {
+const NLType *type_system_get_type(const NLTypeSystem *type_system, uint16_t type) {
const NLType *nl_type;
- assert(ret);
assert(type_system);
assert(type_system->types);
if (type >= type_system->count)
- return -EOPNOTSUPP;
+ return NULL;
nl_type = &type_system->types[type];
if (nl_type->type == NETLINK_TYPE_UNSPEC)
- return -EOPNOTSUPP;
+ return NULL;
- *ret = nl_type;
- return 0;
+ return nl_type;
}
-int type_system_get_type_system(const NLTypeSystem *type_system, const NLTypeSystem **ret, uint16_t type) {
+const NLTypeSystem *type_system_get_type_system(const NLTypeSystem *type_system, uint16_t type) {
const NLType *nl_type;
- int r;
- assert(ret);
+ nl_type = type_system_get_type(type_system, type);
+ if (!nl_type)
+ return NULL;
- r = type_system_get_type(type_system, &nl_type, type);
- if (r < 0)
- return r;
-
- *ret = type_get_type_system(nl_type);
- return 0;
+ return type_get_type_system(nl_type);
}
-int type_system_get_type_system_union(const NLTypeSystem *type_system, const NLTypeSystemUnion **ret, uint16_t type) {
+const NLTypeSystemUnion *type_system_get_type_system_union(const NLTypeSystem *type_system, uint16_t type) {
const NLType *nl_type;
- int r;
-
- assert(ret);
- r = type_system_get_type(type_system, &nl_type, type);
- if (r < 0)
- return r;
+ nl_type = type_system_get_type(type_system, type);
+ if (!nl_type)
+ return NULL;
- *ret = type_get_type_system_union(nl_type);
- return 0;
+ return type_get_type_system_union(nl_type);
}
NLMatchType type_system_union_get_match_type(const NLTypeSystemUnion *type_system_union) {
@@ -152,33 +136,27 @@ uint16_t type_system_union_get_match_attribute(const NLTypeSystemUnion *type_sys
return type_system_union->match_attribute;
}
-int type_system_union_get_type_system_by_string(const NLTypeSystemUnion *type_system_union, const NLTypeSystem **ret, const char *key) {
+const NLTypeSystem *type_system_union_get_type_system_by_string(const NLTypeSystemUnion *type_system_union, const char *key) {
assert(type_system_union);
assert(type_system_union->elements);
assert(type_system_union->match_type == NL_MATCH_SIBLING);
- assert(ret);
assert(key);
for (size_t i = 0; i < type_system_union->count; i++)
- if (streq(type_system_union->elements[i].name, key)) {
- *ret = &type_system_union->elements[i].type_system;
- return 0;
- }
+ if (streq(type_system_union->elements[i].name, key))
+ return &type_system_union->elements[i].type_system;
- return -EOPNOTSUPP;
+ return NULL;
}
-int type_system_union_get_type_system_by_protocol(const NLTypeSystemUnion *type_system_union, const NLTypeSystem **ret, uint16_t protocol) {
+const NLTypeSystem *type_system_union_get_type_system_by_protocol(const NLTypeSystemUnion *type_system_union, uint16_t protocol) {
assert(type_system_union);
assert(type_system_union->elements);
assert(type_system_union->match_type == NL_MATCH_PROTOCOL);
- assert(ret);
for (size_t i = 0; i < type_system_union->count; i++)
- if (type_system_union->elements[i].protocol == protocol) {
- *ret = &type_system_union->elements[i].type_system;
- return 0;
- }
+ if (type_system_union->elements[i].protocol == protocol)
+ return &type_system_union->elements[i].type_system;
- return -EOPNOTSUPP;
+ return NULL;
}
diff --git a/src/libsystemd/sd-netlink/netlink-types.h b/src/libsystemd/sd-netlink/netlink-types.h
index f8261b681c..d481f3072f 100644
--- a/src/libsystemd/sd-netlink/netlink-types.h
+++ b/src/libsystemd/sd-netlink/netlink-types.h
@@ -35,9 +35,9 @@ typedef struct NLTypeSystemUnion NLTypeSystemUnion;
typedef struct NLTypeSystem NLTypeSystem;
typedef struct NLType NLType;
-int rtnl_get_type(uint16_t nlmsg_type, const NLType **ret);
-int nfnl_get_type(uint16_t nlmsg_type, const NLType **ret);
-int genl_get_type_system_by_name(const char *name, const NLTypeSystem **ret);
+const NLType *rtnl_get_type(uint16_t nlmsg_type);
+const NLType *nfnl_get_type(uint16_t nlmsg_type);
+const NLTypeSystem *genl_get_type_system_by_name(const char *name);
int genl_get_type_system_and_header_size(
sd_netlink *nl,
uint16_t id,
@@ -55,11 +55,10 @@ int type_system_root_get_type_system_and_header_size(
const NLTypeSystem **ret_type_system,
size_t *ret_header_size);
-uint16_t type_system_get_count(const NLTypeSystem *type_system);
-int type_system_get_type(const NLTypeSystem *type_system, const NLType **ret, uint16_t type);
-int type_system_get_type_system(const NLTypeSystem *type_system, const NLTypeSystem **ret, uint16_t type);
-int type_system_get_type_system_union(const NLTypeSystem *type_system, const NLTypeSystemUnion **ret, uint16_t type);
+const NLType *type_system_get_type(const NLTypeSystem *type_system, uint16_t type);
+const NLTypeSystem *type_system_get_type_system(const NLTypeSystem *type_system, uint16_t type);
+const NLTypeSystemUnion *type_system_get_type_system_union(const NLTypeSystem *type_system, uint16_t type);
NLMatchType type_system_union_get_match_type(const NLTypeSystemUnion *type_system_union);
uint16_t type_system_union_get_match_attribute(const NLTypeSystemUnion *type_system_union);
-int type_system_union_get_type_system_by_string(const NLTypeSystemUnion *type_system_union, const NLTypeSystem **ret, const char *key);
-int type_system_union_get_type_system_by_protocol(const NLTypeSystemUnion *type_system_union, const NLTypeSystem **ret, uint16_t protocol);
+const NLTypeSystem *type_system_union_get_type_system_by_string(const NLTypeSystemUnion *type_system_union, const char *key);
+const NLTypeSystem *type_system_union_get_type_system_by_protocol(const NLTypeSystemUnion *type_system_union, uint16_t protocol);