chiark / gitweb /
sd-bus: sync kdbus.h (ABI break)
[elogind.git] / src / libsystemd / sd-bus / bus-control.c
index b22f4c4ff6679b9eebc15100597dccb222366553..d9a53c702f2ecbda8bfcdcb5e7475deb3081b66d 100644 (file)
@@ -58,15 +58,15 @@ static int bus_request_name_kernel(sd_bus *bus, const char *name, uint64_t flags
         assert(bus);
         assert(name);
 
-        l = strlen(name);
-        size = offsetof(struct kdbus_cmd_name, items) + KDBUS_ITEM_SIZE(l + 1);
+        l = strlen(name) + 1;
+        size = offsetof(struct kdbus_cmd_name, items) + KDBUS_ITEM_SIZE(l);
         n = alloca0_align(size, 8);
         n->size = size;
         kdbus_translate_request_name_flags(flags, (uint64_t *) &n->flags);
 
-        n->items[0].size = KDBUS_ITEM_HEADER_SIZE + l + 1;
+        n->items[0].size = KDBUS_ITEM_HEADER_SIZE + l;
         n->items[0].type = KDBUS_ITEM_NAME;
-        memcpy(n->items[0].str, name, l+1);
+        memcpy(n->items[0].str, name, l);
 
 #ifdef HAVE_VALGRIND_MEMCHECK_H
         VALGRIND_MAKE_MEM_DEFINED(n, n->size);
@@ -153,14 +153,14 @@ static int bus_release_name_kernel(sd_bus *bus, const char *name) {
         assert(bus);
         assert(name);
 
-        l = strlen(name);
-        size = offsetof(struct kdbus_cmd_name, items) + KDBUS_ITEM_SIZE(l + 1);
+        l = strlen(name) + 1;
+        size = offsetof(struct kdbus_cmd_name, items) + KDBUS_ITEM_SIZE(l);
         n = alloca0_align(size, 8);
         n->size = size;
 
-        n->items[0].size = KDBUS_ITEM_HEADER_SIZE + l + 1;
+        n->items[0].size = KDBUS_ITEM_HEADER_SIZE + l;
         n->items[0].type = KDBUS_ITEM_NAME;
-        memcpy(n->items[0].str, name, l+1);
+        memcpy(n->items[0].str, name, l);
 
 #ifdef HAVE_VALGRIND_MEMCHECK_H
         VALGRIND_MAKE_MEM_DEFINED(n, n->size);
@@ -389,13 +389,17 @@ static int bus_get_owner_kdbus(
         if (r < 0)
                 return r;
         if (r > 0) {
-                size = offsetof(struct kdbus_cmd_conn_info, name);
+                size = offsetof(struct kdbus_cmd_conn_info, items);
                 cmd = alloca0_align(size, 8);
                 cmd->id = id;
         } else {
-                size = offsetof(struct kdbus_cmd_conn_info, name) + strlen(name) + 1;
+                size_t item_size = KDBUS_ITEM_HEADER_SIZE + strlen(name) + 1;
+
+                size = offsetof(struct kdbus_cmd_conn_info, items) + item_size;
                 cmd = alloca0_align(size, 8);
-                strcpy(cmd->name, name);
+                cmd->items[0].size = item_size;
+                cmd->items[0].type = KDBUS_ITEM_NAME;
+                strcpy(cmd->items[0].str, name);
         }
 
         cmd->size = size;