1
0
mirror of https://github.com/systemd/systemd.git synced 2025-02-03 17:47:28 +03:00

sd-bus: sync kdbus.h (ABI break)

The KDBUS_CMD_FREE ioctl now uses a struct rather than a direct pointer
to the offset to free.

The KDBUS_CMD_MSG_CANCEL ioctl has also changes, but there's no user of
it yet in systemd.
This commit is contained in:
Daniel Mack 2014-10-06 18:36:16 +02:00
parent 27c64db6df
commit d663f1b1a9
4 changed files with 60 additions and 8 deletions

View File

@ -730,6 +730,7 @@ static int process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m) {
} else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "ListQueuedOwners")) {
struct kdbus_cmd_name_list cmd = {};
struct kdbus_name_list *name_list;
struct kdbus_cmd_free cmd_free;
struct kdbus_cmd_name *name;
_cleanup_strv_free_ char **owners = NULL;
char *arg0;
@ -773,7 +774,10 @@ static int process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m) {
}
}
r = ioctl(a->input_fd, KDBUS_CMD_FREE, &cmd.offset);
cmd_free.flags = 0;
cmd_free.offset = cmd.offset;
r = ioctl(a->input_fd, KDBUS_CMD_FREE, &cmd_free);
if (r < 0)
return synthetic_reply_method_errno(m, r, NULL);

View File

@ -223,6 +223,23 @@ _public_ int sd_bus_release_name(sd_bus *bus, const char *name) {
return bus_release_name_dbus1(bus, name);
}
static int kernel_cmd_free(sd_bus *bus, uint64_t offset)
{
struct kdbus_cmd_free cmd;
int r;
assert(bus);
cmd.flags = 0;
cmd.offset = offset;
r = ioctl(bus->input_fd, KDBUS_CMD_FREE, &cmd);
if (r < 0)
return -errno;
return 0;
}
static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
struct kdbus_cmd_name_list cmd = {};
struct kdbus_name_list *name_list;
@ -269,9 +286,9 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
}
}
r = ioctl(bus->input_fd, KDBUS_CMD_FREE, &cmd.offset);
r = kernel_cmd_free(bus, cmd.offset);
if (r < 0)
return -errno;
return r;
return 0;
}
@ -597,7 +614,7 @@ static int bus_get_owner_kdbus(
r = 0;
fail:
ioctl(bus->input_fd, KDBUS_CMD_FREE, &cmd->offset);
kernel_cmd_free(bus, cmd->offset);
return r;
}

View File

@ -799,14 +799,17 @@ int bus_kernel_connect(sd_bus *b) {
}
static void close_kdbus_msg(sd_bus *bus, struct kdbus_msg *k) {
struct kdbus_cmd_free cmd;
uint64_t off _alignas_(8);
struct kdbus_item *d;
assert(bus);
assert(k);
off = (uint8_t *)k - (uint8_t *)bus->kdbus_buffer;
ioctl(bus->input_fd, KDBUS_CMD_FREE, &off);
cmd.flags = 0;
cmd.offset = (uint8_t *)k - (uint8_t *)bus->kdbus_buffer;
ioctl(bus->input_fd, KDBUS_CMD_FREE, &cmd);
KDBUS_ITEM_FOREACH(d, k, items) {

View File

@ -443,6 +443,31 @@ struct kdbus_cmd_recv {
__u64 offset;
} __attribute__((aligned(8)));
/**
* struct kdbus_cmd_cancel - struct to cancel a synchronously pending message
* @cookie The cookie of the pending message
* @flags Flags for the free command. Currently unused.
*
* This struct is used with the KDBUS_CMD_CANCEL ioctl.
*/
struct kdbus_cmd_cancel {
__u64 cookie;
__u64 flags;
} __attribute__((aligned(8)));
/**
* struct kdbus_cmd_free - struct to free a slice of memory in the pool
* @offset The offset of the memory slice, as returned by other
* ioctls
* @flags Flags for the free command. Currently unused.
*
* This struct is used with the KDBUS_CMD_FREE ioctl.
*/
struct kdbus_cmd_free {
__u64 offset;
__u64 flags;
} __attribute__((aligned(8)));
/**
* enum kdbus_policy_access_type - permissions of a policy record
* @_KDBUS_POLICY_ACCESS_NULL: Uninitialized/invalid
@ -710,6 +735,7 @@ struct kdbus_conn_info {
*/
struct kdbus_cmd_update {
__u64 size;
__u64 flags;
struct kdbus_item items[0];
} __attribute__((aligned(8)));
@ -807,8 +833,10 @@ enum kdbus_ioctl_type {
struct kdbus_msg),
KDBUS_CMD_MSG_RECV = _IOWR(KDBUS_IOCTL_MAGIC, 0x41,
struct kdbus_cmd_recv),
KDBUS_CMD_MSG_CANCEL = _IOW(KDBUS_IOCTL_MAGIC, 0x42, __u64 *),
KDBUS_CMD_FREE = _IOW(KDBUS_IOCTL_MAGIC, 0x43, __u64 *),
KDBUS_CMD_MSG_CANCEL = _IOW(KDBUS_IOCTL_MAGIC, 0x42,
struct kdbus_cmd_cancel),
KDBUS_CMD_FREE = _IOW(KDBUS_IOCTL_MAGIC, 0x43,
struct kdbus_cmd_free),
KDBUS_CMD_NAME_ACQUIRE = _IOWR(KDBUS_IOCTL_MAGIC, 0x50,
struct kdbus_cmd_name),