chiark / gitweb /
silence warnings
[elogind.git] / src / libsystemd / sd-rtnl / rtnl-message.c
index 17b928059f40b80b688b52d0624434e9ed471219..3576274e4542fc7d3da55bef9b10707b72f8166f 100644 (file)
@@ -213,6 +213,22 @@ int sd_rtnl_message_new_link(sd_rtnl *rtnl, sd_rtnl_message **ret,
         return 0;
 }
 
+int sd_rtnl_message_request_dump(sd_rtnl_message *m, int dump) {
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(m->hdr->nlmsg_type == RTM_GETLINK ||
+                      m->hdr->nlmsg_type == RTM_GETADDR ||
+                      m->hdr->nlmsg_type == RTM_GETROUTE,
+                      -EINVAL);
+
+        if (dump)
+                m->hdr->nlmsg_flags |= NLM_F_DUMP;
+        else
+                m->hdr->nlmsg_flags &= ~NLM_F_DUMP;
+
+        return 0;
+}
+
 int sd_rtnl_message_addr_set_prefixlen(sd_rtnl_message *m, unsigned char prefixlen) {
         struct ifaddrmsg *ifa;
 
@@ -1076,7 +1092,7 @@ int socket_read_message(sd_rtnl *rtnl) {
         struct nlmsghdr *new_msg;
         size_t len;
         int r;
-        unsigned i;
+        unsigned i = 0;
 
         assert(rtnl);
         assert(rtnl->rbuffer);
@@ -1210,16 +1226,16 @@ int socket_read_message(sd_rtnl *rtnl) {
                 if (r < 0)
                         return r;
 
-                if (i < rtnl->rqueue_partial_size) {
+                rtnl->rqueue[rtnl->rqueue_size ++] = first;
+                first = NULL;
+
+                if (multi_part && (i < rtnl->rqueue_partial_size)) {
                         /* remove the message form the partial read queue */
                         memmove(rtnl->rqueue_partial + i,rtnl->rqueue_partial + i + 1,
                                 sizeof(sd_rtnl_message*) * (rtnl->rqueue_partial_size - i - 1));
                         rtnl->rqueue_partial_size --;
                 }
 
-                rtnl->rqueue[rtnl->rqueue_size ++] = first;
-                first = NULL;
-
                 return 1;
         } else {
                 /* we only got a partial multi-part message, push it on the