summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2015-06-23 12:10:38 +0200
committerSven Eden <yamakuzure@gmx.net>2017-03-14 10:04:18 +0100
commit2f80599e296658b1322d9dca08adee57fde8a8e3 (patch)
treed9c6fafbdbff4d51ef16d731491c40fe0b4966f4
parent84e862614a39d6e1d5d2317472175ec79bbc769f (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.c4
-rw-r--r--src/libsystemd/sd-netlink/netlink-types.c7
-rw-r--r--src/libsystemd/sd-netlink/netlink-types.h2
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);