chiark / gitweb /
bus: update kdbus.h (ABI break)
[elogind.git] / src / libsystemd / bus-kernel.c
index e8f4c581105f6a3b29166ec8876e48e2147abf98..d3eeb52425c35939c697c4d0f607c0dfeeae7c51 100644 (file)
@@ -947,8 +947,8 @@ fail:
 }
 
 int bus_kernel_read_message(sd_bus *bus) {
+        struct kdbus_cmd_recv recv = {};
         struct kdbus_msg *k;
-        uint64_t off;
         int r;
 
         assert(bus);
@@ -957,14 +957,14 @@ int bus_kernel_read_message(sd_bus *bus) {
         if (r < 0)
                 return r;
 
-        r = ioctl(bus->input_fd, KDBUS_CMD_MSG_RECV, &off);
+        r = ioctl(bus->input_fd, KDBUS_CMD_MSG_RECV, &recv);
         if (r < 0) {
                 if (errno == EAGAIN)
                         return 0;
 
                 return -errno;
         }
-        k = (struct kdbus_msg *)((uint8_t *)bus->kdbus_buffer + off);
+        k = (struct kdbus_msg *)((uint8_t *)bus->kdbus_buffer + recv.offset);
 
         if (k->payload_type == KDBUS_PAYLOAD_DBUS) {
                 r = bus_kernel_make_message(bus, k);
@@ -1000,18 +1000,21 @@ int bus_kernel_pop_memfd(sd_bus *bus, void **address, size_t *mapped, size_t *al
         assert_se(pthread_mutex_lock(&bus->memfd_cache_mutex) >= 0);
 
         if (bus->n_memfd_cache <= 0) {
+                struct kdbus_cmd_memfd_make cmd = {
+                        .size = sizeof(struct kdbus_cmd_memfd_make),
+                };
                 int r;
 
                 assert_se(pthread_mutex_unlock(&bus->memfd_cache_mutex) >= 0);
 
-                r = ioctl(bus->input_fd, KDBUS_CMD_MEMFD_NEW, &fd);
+                r = ioctl(bus->input_fd, KDBUS_CMD_MEMFD_NEW, &cmd);
                 if (r < 0)
                         return -errno;
 
                 *address = NULL;
                 *mapped = 0;
                 *allocated = 0;
-                return fd;
+                return cmd.fd;
         }
 
         c = &bus->memfd_cache[--bus->n_memfd_cache];