chiark / gitweb /
update TODO
[elogind.git] / src / libsystemd-bus / bus-socket.c
index 6845f9d1bb6410e53c641cff4e71407224adb115..1365092d736fa3f9eaadcfe8824c40d1a8c1c4aa 100644 (file)
@@ -623,6 +623,10 @@ int bus_socket_setup(sd_bus *b) {
         if (getsockopt(b->input_fd, SOL_SOCKET, SO_PEERCRED, &b->ucred, &l) >= 0 && l >= sizeof(b->ucred))
                 b->ucred_valid = b->ucred.pid > 0;
 
+        b->is_kernel = false;
+        b->message_version = 1;
+        b->message_endian = 0;
+
         return 0;
 }
 
@@ -765,6 +769,10 @@ int bus_socket_exec(sd_bus *b) {
         close_nointr_nofail(s[1]);
         b->output_fd = b->input_fd = s[0];
 
+        r = bus_socket_setup(b);
+        if (r < 0)
+                return r;
+
         return bus_socket_start_auth(b);
 }
 
@@ -874,10 +882,10 @@ static int bus_socket_read_message_need(sd_bus *bus, size_t *need) {
         b = ((const uint32_t*) bus->rbuffer)[3];
 
         e = ((const uint8_t*) bus->rbuffer)[0];
-        if (e == SD_BUS_LITTLE_ENDIAN) {
+        if (e == BUS_LITTLE_ENDIAN) {
                 a = le32toh(a);
                 b = le32toh(b);
-        } else if (e == SD_BUS_BIG_ENDIAN) {
+        } else if (e == BUS_BIG_ENDIAN) {
                 a = be32toh(a);
                 b = be32toh(b);
         } else
@@ -891,16 +899,19 @@ static int bus_socket_read_message_need(sd_bus *bus, size_t *need) {
         return 0;
 }
 
-static int bus_socket_make_message(sd_bus *bus, size_t size, sd_bus_message **m) {
+static int bus_socket_make_message(sd_bus *bus, size_t size) {
         sd_bus_message *t;
         void *b;
         int r;
 
         assert(bus);
-        assert(m);
         assert(bus->rbuffer_size >= size);
         assert(bus->state == BUS_RUNNING || bus->state == BUS_HELLO);
 
+        r = bus_rqueue_make_room(bus);
+        if (r < 0)
+                return r;
+
         if (bus->rbuffer_size > size) {
                 b = memdup((const uint8_t*) bus->rbuffer + size,
                            bus->rbuffer_size - size);
@@ -926,11 +937,12 @@ static int bus_socket_make_message(sd_bus *bus, size_t size, sd_bus_message **m)
         bus->fds = NULL;
         bus->n_fds = 0;
 
-        *m = t;
+        bus->rqueue[bus->rqueue_size++] = t;
+
         return 1;
 }
 
-int bus_socket_read_message(sd_bus *bus, sd_bus_message **m) {
+int bus_socket_read_message(sd_bus *bus) {
         struct msghdr mh;
         struct iovec iov;
         ssize_t k;
@@ -947,7 +959,6 @@ int bus_socket_read_message(sd_bus *bus, sd_bus_message **m) {
         bool handle_cmsg = false;
 
         assert(bus);
-        assert(m);
         assert(bus->state == BUS_RUNNING || bus->state == BUS_HELLO);
 
         r = bus_socket_read_message_need(bus, &need);
@@ -955,7 +966,7 @@ int bus_socket_read_message(sd_bus *bus, sd_bus_message **m) {
                 return r;
 
         if (bus->rbuffer_size >= need)
-                return bus_socket_make_message(bus, need, m);
+                return bus_socket_make_message(bus, need);
 
         b = realloc(bus->rbuffer, need);
         if (!b)
@@ -1045,7 +1056,7 @@ int bus_socket_read_message(sd_bus *bus, sd_bus_message **m) {
                 return r;
 
         if (bus->rbuffer_size >= need)
-                return bus_socket_make_message(bus, need, m);
+                return bus_socket_make_message(bus, need);
 
         return 1;
 }