chiark / gitweb /
sd-rtnl: fix creation of synthetic error replies
authorTom Gundersen <teg@jklm.no>
Fri, 6 Feb 2015 10:49:07 +0000 (11:49 +0100)
committerTom Gundersen <teg@jklm.no>
Fri, 6 Feb 2015 10:49:39 +0000 (11:49 +0100)
src/libsystemd/sd-rtnl/rtnl-message.c
src/libsystemd/sd-rtnl/rtnl-util.c
src/libsystemd/sd-rtnl/test-rtnl.c

index 1f44c341aa64dbd395c9796735fe2f052b006724..23253029e5fefbc4ed69e25fda18da24dd1bf339 100644 (file)
@@ -71,8 +71,6 @@ int message_new(sd_rtnl *rtnl, sd_rtnl_message **ret, uint16_t type) {
         if (r < 0)
                 return r;
 
-        assert(nl_type->type == NLA_NESTED);
-
         r = message_new_empty(rtnl, &m);
         if (r < 0)
                 return r;
index 194a267b04b88af126235ee2f63a17a9035871f7..5666ea44cb385bb42a5398a5ed25dcc50564a964 100644 (file)
@@ -107,12 +107,10 @@ int rtnl_message_new_synthetic_error(int error, uint32_t serial, sd_rtnl_message
 
         assert(error <= 0);
 
-        r = message_new(NULL, ret, NLMSG_SPACE(sizeof(struct nlmsgerr)));
+        r = message_new(NULL, ret, NLMSG_ERROR);
         if (r < 0)
                 return r;
 
-        (*ret)->hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct nlmsgerr));
-        (*ret)->hdr->nlmsg_type = NLMSG_ERROR;
         (*ret)->hdr->nlmsg_seq = serial;
 
         err = NLMSG_DATA((*ret)->hdr);
index 72d8fe2273c2d85bb7f9849de16975dfe2a01118..ed60b3cb4549ce30ee711200f000e0736417d785 100644 (file)
@@ -353,6 +353,13 @@ static void test_get_addresses(sd_rtnl *rtnl) {
         }
 }
 
+static void test_message(void) {
+        _cleanup_rtnl_message_unref_ sd_rtnl_message *m = NULL;
+
+        assert_se(rtnl_message_new_synthetic_error(-ETIMEDOUT, 1, &m) >= 0);
+        assert_se(sd_rtnl_message_get_errno(m) == -ETIMEDOUT);
+}
+
 int main(void) {
         sd_rtnl *rtnl;
         sd_rtnl_message *m;
@@ -361,6 +368,8 @@ int main(void) {
         int if_loopback;
         uint16_t type;
 
+        test_message();
+
         test_match();
 
         test_multiple();