mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-23 17:34:00 +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:
parent
e7de105cf6
commit
846a6b3d89
@ -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;
|
||||
|
||||
|
@ -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",
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user