diff options
author | David Herrmann <dh.herrmann@gmail.com> | 2015-06-23 12:10:38 +0200 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2017-03-14 10:04:18 +0100 |
commit | 2f80599e296658b1322d9dca08adee57fde8a8e3 (patch) | |
tree | d9c6fafbdbff4d51ef16d731491c40fe0b4966f4 | |
parent | 84e862614a39d6e1d5d2317472175ec79bbc769f (diff) |
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.
-rw-r--r-- | src/libsystemd/sd-netlink/netlink-message.c | 4 | ||||
-rw-r--r-- | src/libsystemd/sd-netlink/netlink-types.c | 7 | ||||
-rw-r--r-- | src/libsystemd/sd-netlink/netlink-types.h | 2 |
3 files changed, 6 insertions, 7 deletions
diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c index bfbc0e6c9..3f8bf0182 100644 --- a/src/libsystemd/sd-netlink/netlink-message.c +++ b/src/libsystemd/sd-netlink/netlink-message.c @@ -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; @@ -872,7 +872,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; diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c index d22194ad7..40548dcbc 100644 --- a/src/libsystemd/sd-netlink/netlink-types.c +++ b/src/libsystemd/sd-netlink/netlink-types.c @@ -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) diff --git a/src/libsystemd/sd-netlink/netlink-types.h b/src/libsystemd/sd-netlink/netlink-types.h index d64229546..b1ef7af42 100644 --- a/src/libsystemd/sd-netlink/netlink-types.h +++ b/src/libsystemd/sd-netlink/netlink-types.h @@ -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); |