_public_ int sd_bus_get_unique_name(sd_bus *bus, const char **unique) {
int r;
- if (!bus)
- return -EINVAL;
- if (!unique)
- return -EINVAL;
- if (bus_pid_changed(bus))
- return -ECHILD;
+ assert_return(bus, -EINVAL);
+ assert_return(unique, -EINVAL);
+ assert_return(!bus_pid_changed(bus), -ECHILD);
r = bus_ensure_running(bus);
if (r < 0)
uint32_t ret;
int r;
- if (!bus)
- return -EINVAL;
- if (!name)
- return -EINVAL;
- if (!bus->bus_client)
- return -EINVAL;
- if (!BUS_IS_OPEN(bus->state))
- return -ENOTCONN;
- if (bus_pid_changed(bus))
- return -ECHILD;
+ assert_return(bus, -EINVAL);
+ assert_return(name, -EINVAL);
+ assert_return(bus->bus_client, -EINVAL);
+ assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
+ assert_return(!bus_pid_changed(bus), -ECHILD);
if (bus->is_kernel) {
struct kdbus_cmd_name *n;
#endif
r = ioctl(bus->input_fd, KDBUS_CMD_NAME_ACQUIRE, n);
- if (r < 0)
+ if (r < 0) {
+ if (errno == -EALREADY)
+ return SD_BUS_NAME_ALREADY_OWNER;
+
+ if (errno == -EEXIST)
+ return SD_BUS_NAME_EXISTS;
+
return -errno;
+ }
- return n->flags;
+ if (n->flags & KDBUS_NAME_IN_QUEUE)
+ return SD_BUS_NAME_IN_QUEUE;
+
+ return SD_BUS_NAME_PRIMARY_OWNER;
} else {
r = sd_bus_call_method(
bus,
uint32_t ret;
int r;
- if (!bus)
- return -EINVAL;
- if (!name)
- return -EINVAL;
- if (!bus->bus_client)
- return -EINVAL;
- if (!BUS_IS_OPEN(bus->state))
- return -ENOTCONN;
- if (bus_pid_changed(bus))
- return -ECHILD;
+ assert_return(bus, -EINVAL);
+ assert_return(name, -EINVAL);
+ assert_return(bus->bus_client, -EINVAL);
+ assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
+ assert_return(!bus_pid_changed(bus), -ECHILD);
if (bus->is_kernel) {
struct kdbus_cmd_name *n;
char **x = NULL;
int r;
- if (!bus)
- return -EINVAL;
- if (!l)
- return -EINVAL;
- if (!BUS_IS_OPEN(bus->state))
- return -ENOTCONN;
- if (bus_pid_changed(bus))
- return -ECHILD;
+ assert_return(bus, -EINVAL);
+ assert_return(l, -EINVAL);
+ assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
+ assert_return(!bus_pid_changed(bus), -ECHILD);
if (bus->is_kernel) {
_cleanup_free_ struct kdbus_cmd_names *names = NULL;
return -ENOMEM;
names->size = size;
+ names->flags = KDBUS_NAME_LIST_UNIQUE_NAMES;
r = ioctl(sd_bus_get_fd(bus), KDBUS_CMD_NAME_LIST, names);
if (r < 0) {
}
KDBUS_PART_FOREACH(name, names, names) {
- r = strv_extend(&x, name->name);
+ char *n;
+
+ if (name->size > sizeof(*name))
+ n = name->name;
+ else
+ asprintf(&n, ":1.%llu", (unsigned long long) name->id);
+
+ r = strv_extend(&x, n);
if (r < 0)
return -ENOMEM;
}