1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-12-24 21:34:08 +03:00

sd-netlink: don't treat NULL as root type-system

Explicitly export the root type-system to the type-system callers. This
avoids treating NULL as root, which for one really looks backwards (NULL
is usually a leaf, not root), and secondly prevents us from properly
debugging calling into non-nested types.

Also rename the root to "type_system_root". Once we support more than
rtnl, well will have to revisit that, anyway.
This commit is contained in:
David Herrmann 2015-06-23 12:10:38 +02:00
parent e7de105cf6
commit 846a6b3d89
4 changed files with 7 additions and 8 deletions

View File

@ -68,7 +68,7 @@ int message_new(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t type) {
size_t size;
int r;
r = type_system_get_type(NULL, &nl_type, type);
r = type_system_get_type(&type_system_root, &nl_type, type);
if (r < 0)
return r;
@ -874,7 +874,7 @@ int sd_netlink_message_rewind(sd_netlink_message *m) {
assert(m->hdr);
r = type_system_get_type(NULL, &nl_type, m->hdr->nlmsg_type);
r = type_system_get_type(&type_system_root, &nl_type, m->hdr->nlmsg_type);
if (r < 0)
return r;

View File

@ -243,7 +243,7 @@ int socket_read_message(sd_netlink *rtnl) {
}
/* check that we support this message type */
r = type_system_get_type(NULL, &nl_type, new_msg->nlmsg_type);
r = type_system_get_type(&type_system_root, &nl_type, new_msg->nlmsg_type);
if (r < 0) {
if (r == -EOPNOTSUPP)
log_debug("sd-netlink: ignored message with unknown type: %i",

View File

@ -476,7 +476,7 @@ static const NLType rtnl_types[RTM_MAX + 1] = {
[RTM_GETNEIGH] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_neigh_type_system, .size = sizeof(struct ndmsg) },
};
const NLTypeSystem rtnl_type_system = {
const NLTypeSystem type_system_root = {
.count = ELEMENTSOF(rtnl_types),
.types = rtnl_types,
};
@ -518,10 +518,7 @@ int type_system_get_type(const NLTypeSystem *type_system, const NLType **ret, ui
const NLType *nl_type;
assert(ret);
if (!type_system)
type_system = &rtnl_type_system;
assert(type_system);
assert(type_system->types);
if (type >= type_system->count)

View File

@ -52,6 +52,8 @@ struct NLTypeSystemUnion {
const NLTypeSystem *type_systems;
};
extern const NLTypeSystem type_system_root;
uint16_t type_get_type(const NLType *type);
size_t type_get_size(const NLType *type);
void type_get_type_system(const NLType *type, const NLTypeSystem **ret);