void *userdata) {
int r;
- void *p;
+ const void *p;
assert(bus);
assert(v);
switch (v->x.property.signature[0]) {
case SD_BUS_TYPE_STRING:
- case SD_BUS_TYPE_OBJECT_PATH:
case SD_BUS_TYPE_SIGNATURE:
+ p = strempty(*(char**) userdata);
+ break;
+
+ case SD_BUS_TYPE_OBJECT_PATH:
p = *(char**) userdata;
+ assert(p);
break;
default:
const char *interface,
const char *name, ...) {
- _cleanup_strv_free_ char **names = NULL;
- va_list ap;
+ char **names;
assert_return(bus, -EINVAL);
assert_return(object_path_is_valid(path), -EINVAL);
if (!name)
return 0;
- va_start(ap, name);
- names = strv_new_ap(name, ap);
- va_end(ap);
-
- if (!names)
- return -ENOMEM;
+ names = strv_from_stdarg_alloca(name);
return sd_bus_emit_properties_changed_strv(bus, path, interface, names);
}
}
int sd_bus_emit_interfaces_added(sd_bus *bus, const char *path, const char *interface, ...) {
- _cleanup_strv_free_ char **interfaces = NULL;
- va_list ap;
+ char **interfaces;
assert_return(bus, -EINVAL);
assert_return(object_path_is_valid(path), -EINVAL);
assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
assert_return(!bus_pid_changed(bus), -ECHILD);
- va_start(ap, interface);
- interfaces = strv_new_ap(interface, ap);
- va_end(ap);
-
- if (!interfaces)
- return -ENOMEM;
+ interfaces = strv_from_stdarg_alloca(interface);
return sd_bus_emit_interfaces_added_strv(bus, path, interfaces);
}
}
int sd_bus_emit_interfaces_removed(sd_bus *bus, const char *path, const char *interface, ...) {
- _cleanup_strv_free_ char **interfaces = NULL;
- va_list ap;
+ char **interfaces;
assert_return(bus, -EINVAL);
assert_return(object_path_is_valid(path), -EINVAL);
assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
assert_return(!bus_pid_changed(bus), -ECHILD);
- va_start(ap, interface);
- interfaces = strv_new_ap(interface, ap);
- va_end(ap);
-
- if (!interfaces)
- return -ENOMEM;
+ interfaces = strv_from_stdarg_alloca(interface);
return sd_bus_emit_interfaces_removed_strv(bus, path, interfaces);
}