chiark / gitweb /
bus: introduce bus_error_is_dirty() independently of sd_bus_error_is_set()
[elogind.git] / src / libsystemd-bus / sd-bus.c
index 3f23da6ff538bfd2e95f9e09e5a804c0f2b52d6c..c5cbb5682d8cc370dac7f55d08b56c7ba1fc68fd 100644 (file)
@@ -833,10 +833,6 @@ static int message_make(sd_bus *bus, size_t size, sd_bus_message **m) {
         assert(m);
         assert(bus->rbuffer_size >= size);
 
-        t = new0(sd_bus_message, 1);
-        if (!t)
-                return -ENOMEM;
-
         if (bus->rbuffer_size > size) {
                 b = memdup((const uint8_t*) bus->rbuffer + size, bus->rbuffer_size - size);
                 if (!b) {
@@ -845,13 +841,11 @@ static int message_make(sd_bus *bus, size_t size, sd_bus_message **m) {
                 }
         }
 
-        t->n_ref = 1;
-
-        t->header = bus->rbuffer;
-        t->free_header = true;
-
-        t->fields = (uint8_t*) bus->rbuffer + sizeof(struct bus_header);
-        t->body = (uint8_t*) bus->rbuffer + sizeof(struct bus_header) + ALIGN_TO(BUS_MESSAGE_BODY_SIZE(t), 8);
+        r = bus_message_from_malloc(bus->rbuffer, size, &t);
+        if (r < 0) {
+                free(b);
+                return r;
+        }
 
         bus->rbuffer = b;
         bus->rbuffer_size -= size;
@@ -1137,7 +1131,7 @@ int sd_bus_send_with_reply_and_block(
                 return -EINVAL;
         if (!m->header->type != SD_BUS_MESSAGE_TYPE_METHOD_CALL)
                 return -EINVAL;
-        if (sd_bus_error_is_set(error))
+        if (sd_bus_error_is_dirty(error))
                 return -EINVAL;
 
         r = sd_bus_send(bus, m, &serial);