chiark / gitweb /
sd-netlink: don't treat NULL as root type-system
[elogind.git] / src / libsystemd / sd-netlink / netlink-message.c
index e39e4c646c5cded12b41078afb6453a61704a92b..3f8bf018268d29c9c58538a855544fd9afc7ab27 100644 (file)
@@ -68,13 +68,10 @@ 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;
 
-        if (type_get_type(nl_type) != NETLINK_TYPE_NESTED)
-                return -EINVAL;
-
         r = message_new_empty(rtnl, &m);
         if (r < 0)
                 return r;
@@ -88,7 +85,8 @@ int message_new(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t type) {
 
         m->hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
 
-        type_get_type_system(nl_type, &m->container_type_system[0]);
+        if (type_get_type(nl_type) == NETLINK_TYPE_NESTED)
+                type_get_type_system(nl_type, &m->container_type_system[0]);
         m->hdr->nlmsg_len = size;
         m->hdr->nlmsg_type = type;
 
@@ -874,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;