mirror of
https://github.com/systemd/systemd.git
synced 2025-09-10 21:45:06 +03:00
Merge pull request #7939 from npmccallum/implicit
Implicitly resolve default contexts in sd-event and sd-bus
This commit is contained in:
@@ -43,6 +43,7 @@ _public_ int sd_bus_get_unique_name(sd_bus *bus, const char **unique) {
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(unique, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -105,6 +106,7 @@ _public_ int sd_bus_request_name(
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(name, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -208,6 +210,7 @@ _public_ int sd_bus_request_name_async(
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(name, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -261,6 +264,7 @@ _public_ int sd_bus_release_name(
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(name, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -353,6 +357,7 @@ _public_ int sd_bus_release_name_async(
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(name, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -379,6 +384,7 @@ _public_ int sd_bus_list_names(sd_bus *bus, char ***acquired, char ***activatabl
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(acquired || activatable, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -450,6 +456,7 @@ _public_ int sd_bus_get_name_creds(
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(name, -EINVAL);
|
||||
assert_return((mask & ~SD_BUS_CREDS_AUGMENT) <= _SD_BUS_CREDS_ALL, -EOPNOTSUPP);
|
||||
assert_return(mask == 0 || creds, -EINVAL);
|
||||
@@ -742,6 +749,7 @@ _public_ int sd_bus_get_owner_creds(sd_bus *bus, uint64_t mask, sd_bus_creds **r
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return((mask & ~SD_BUS_CREDS_AUGMENT) <= _SD_BUS_CREDS_ALL, -EOPNOTSUPP);
|
||||
assert_return(ret, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
@@ -900,6 +908,7 @@ _public_ int sd_bus_get_name_machine_id(sd_bus *bus, const char *name, sd_id128_
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(name, -EINVAL);
|
||||
assert_return(machine, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
@@ -36,6 +36,7 @@ _public_ int sd_bus_emit_signal(
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
if (!BUS_IS_OPEN(bus->state))
|
||||
@@ -73,6 +74,7 @@ _public_ int sd_bus_call_method_async(
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
if (!BUS_IS_OPEN(bus->state))
|
||||
@@ -646,6 +648,7 @@ _public_ int sd_bus_match_signal(
|
||||
const char *expression;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
assert_return(!sender || service_name_is_valid(sender), -EINVAL);
|
||||
assert_return(!path || object_path_is_valid(path), -EINVAL);
|
||||
@@ -671,6 +674,7 @@ _public_ int sd_bus_match_signal_async(
|
||||
const char *expression;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
assert_return(!sender || service_name_is_valid(sender), -EINVAL);
|
||||
assert_return(!path || object_path_is_valid(path), -EINVAL);
|
||||
|
@@ -368,6 +368,8 @@ const char *bus_message_type_to_string(uint8_t u) _pure_;
|
||||
|
||||
#define error_name_is_valid interface_name_is_valid
|
||||
|
||||
sd_bus *bus_resolve(sd_bus *bus);
|
||||
|
||||
int bus_ensure_running(sd_bus *bus);
|
||||
int bus_start_running(sd_bus *bus);
|
||||
int bus_next_address(sd_bus *bus);
|
||||
|
@@ -1547,6 +1547,7 @@ static int bus_add_object(
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(object_path_is_valid(path), -EINVAL);
|
||||
assert_return(callback, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
@@ -1650,6 +1651,7 @@ static int add_object_vtable_internal(
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(object_path_is_valid(path), -EINVAL);
|
||||
assert_return(interface_name_is_valid(interface), -EINVAL);
|
||||
assert_return(vtable, -EINVAL);
|
||||
@@ -1859,6 +1861,7 @@ _public_ int sd_bus_add_node_enumerator(
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(object_path_is_valid(path), -EINVAL);
|
||||
assert_return(callback, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
@@ -2110,6 +2113,7 @@ _public_ int sd_bus_emit_properties_changed_strv(
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(object_path_is_valid(path), -EINVAL);
|
||||
assert_return(interface_name_is_valid(interface), -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
@@ -2156,6 +2160,7 @@ _public_ int sd_bus_emit_properties_changed(
|
||||
char **names;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(object_path_is_valid(path), -EINVAL);
|
||||
assert_return(interface_name_is_valid(interface), -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
@@ -2340,6 +2345,7 @@ _public_ int sd_bus_emit_object_added(sd_bus *bus, const char *path) {
|
||||
*/
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(object_path_is_valid(path), -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -2510,6 +2516,7 @@ _public_ int sd_bus_emit_object_removed(sd_bus *bus, const char *path) {
|
||||
*/
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(object_path_is_valid(path), -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -2663,6 +2670,7 @@ _public_ int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path, ch
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(object_path_is_valid(path), -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -2729,6 +2737,7 @@ _public_ int sd_bus_emit_interfaces_added(sd_bus *bus, const char *path, const c
|
||||
char **interfaces;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(object_path_is_valid(path), -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -2746,6 +2755,7 @@ _public_ int sd_bus_emit_interfaces_removed_strv(sd_bus *bus, const char *path,
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(object_path_is_valid(path), -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -2780,6 +2790,7 @@ _public_ int sd_bus_emit_interfaces_removed(sd_bus *bus, const char *path, const
|
||||
char **interfaces;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(object_path_is_valid(path), -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -2797,6 +2808,7 @@ _public_ int sd_bus_add_object_manager(sd_bus *bus, sd_bus_slot **slot, const ch
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(object_path_is_valid(path), -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
|
@@ -136,6 +136,7 @@ _public_ int sd_bus_track_new(
|
||||
sd_bus_track *t;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(track, -EINVAL);
|
||||
|
||||
if (!bus->bus_client)
|
||||
|
@@ -80,6 +80,64 @@ static thread_local sd_bus *default_system_bus = NULL;
|
||||
static thread_local sd_bus *default_user_bus = NULL;
|
||||
static thread_local sd_bus *default_starter_bus = NULL;
|
||||
|
||||
static sd_bus **bus_choose_default(int (**bus_open)(sd_bus **)) {
|
||||
const char *e;
|
||||
|
||||
/* Let's try our best to reuse another cached connection. If
|
||||
* the starter bus type is set, connect via our normal
|
||||
* connection logic, ignoring $DBUS_STARTER_ADDRESS, so that
|
||||
* we can share the connection with the user/system default
|
||||
* bus. */
|
||||
|
||||
e = secure_getenv("DBUS_STARTER_BUS_TYPE");
|
||||
if (e) {
|
||||
if (streq(e, "system")) {
|
||||
if (bus_open)
|
||||
*bus_open = sd_bus_open_system;
|
||||
return &default_system_bus;
|
||||
} else if (STR_IN_SET(e, "user", "session")) {
|
||||
if (bus_open)
|
||||
*bus_open = sd_bus_open_user;
|
||||
return &default_user_bus;
|
||||
}
|
||||
}
|
||||
|
||||
/* No type is specified, so we have not other option than to
|
||||
* use the starter address if it is set. */
|
||||
e = secure_getenv("DBUS_STARTER_ADDRESS");
|
||||
if (e) {
|
||||
if (bus_open)
|
||||
*bus_open = sd_bus_open;
|
||||
return &default_starter_bus;
|
||||
}
|
||||
|
||||
/* Finally, if nothing is set use the cached connection for
|
||||
* the right scope */
|
||||
|
||||
if (cg_pid_get_owner_uid(0, NULL) >= 0) {
|
||||
if (bus_open)
|
||||
*bus_open = sd_bus_open_user;
|
||||
return &default_user_bus;
|
||||
} else {
|
||||
if (bus_open)
|
||||
*bus_open = sd_bus_open_system;
|
||||
return &default_system_bus;
|
||||
}
|
||||
}
|
||||
|
||||
sd_bus *bus_resolve(sd_bus *bus) {
|
||||
switch ((uintptr_t) bus) {
|
||||
case (uintptr_t) SD_BUS_DEFAULT:
|
||||
return *(bus_choose_default(NULL));
|
||||
case (uintptr_t) SD_BUS_DEFAULT_USER:
|
||||
return default_user_bus;
|
||||
case (uintptr_t) SD_BUS_DEFAULT_SYSTEM:
|
||||
return default_system_bus;
|
||||
default:
|
||||
return bus;
|
||||
}
|
||||
}
|
||||
|
||||
void bus_close_io_fds(sd_bus *b) {
|
||||
assert(b);
|
||||
|
||||
@@ -219,6 +277,7 @@ _public_ int sd_bus_set_address(sd_bus *bus, const char *address) {
|
||||
char *a;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(address, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
@@ -235,6 +294,7 @@ _public_ int sd_bus_set_address(sd_bus *bus, const char *address) {
|
||||
|
||||
_public_ int sd_bus_set_fd(sd_bus *bus, int input_fd, int output_fd) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(input_fd >= 0, -EBADF);
|
||||
assert_return(output_fd >= 0, -EBADF);
|
||||
@@ -249,6 +309,7 @@ _public_ int sd_bus_set_exec(sd_bus *bus, const char *path, char *const argv[])
|
||||
char *p, **a;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(path, -EINVAL);
|
||||
assert_return(!strv_isempty(argv), -EINVAL);
|
||||
@@ -275,6 +336,7 @@ _public_ int sd_bus_set_exec(sd_bus *bus, const char *path, char *const argv[])
|
||||
|
||||
_public_ int sd_bus_set_bus_client(sd_bus *bus, int b) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(!bus->patch_sender, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
@@ -285,6 +347,7 @@ _public_ int sd_bus_set_bus_client(sd_bus *bus, int b) {
|
||||
|
||||
_public_ int sd_bus_set_monitor(sd_bus *bus, int b) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -294,6 +357,7 @@ _public_ int sd_bus_set_monitor(sd_bus *bus, int b) {
|
||||
|
||||
_public_ int sd_bus_negotiate_fds(sd_bus *bus, int b) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -303,6 +367,7 @@ _public_ int sd_bus_negotiate_fds(sd_bus *bus, int b) {
|
||||
|
||||
_public_ int sd_bus_negotiate_timestamp(sd_bus *bus, int b) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!IN_SET(bus->state, BUS_CLOSING, BUS_CLOSED), -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -315,6 +380,7 @@ _public_ int sd_bus_negotiate_timestamp(sd_bus *bus, int b) {
|
||||
|
||||
_public_ int sd_bus_negotiate_creds(sd_bus *bus, int b, uint64_t mask) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(mask <= _SD_BUS_CREDS_ALL, -EINVAL);
|
||||
assert_return(!IN_SET(bus->state, BUS_CLOSING, BUS_CLOSED), -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
@@ -329,6 +395,7 @@ _public_ int sd_bus_negotiate_creds(sd_bus *bus, int b, uint64_t mask) {
|
||||
|
||||
_public_ int sd_bus_set_server(sd_bus *bus, int b, sd_id128_t server_id) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(b || sd_id128_equal(server_id, SD_ID128_NULL), -EINVAL);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
@@ -340,6 +407,7 @@ _public_ int sd_bus_set_server(sd_bus *bus, int b, sd_id128_t server_id) {
|
||||
|
||||
_public_ int sd_bus_set_anonymous(sd_bus *bus, int b) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -349,6 +417,7 @@ _public_ int sd_bus_set_anonymous(sd_bus *bus, int b) {
|
||||
|
||||
_public_ int sd_bus_set_trusted(sd_bus *bus, int b) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -358,6 +427,7 @@ _public_ int sd_bus_set_trusted(sd_bus *bus, int b) {
|
||||
|
||||
_public_ int sd_bus_set_description(sd_bus *bus, const char *description) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -366,6 +436,7 @@ _public_ int sd_bus_set_description(sd_bus *bus, const char *description) {
|
||||
|
||||
_public_ int sd_bus_set_allow_interactive_authorization(sd_bus *bus, int b) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
bus->allow_interactive_authorization = !!b;
|
||||
@@ -374,6 +445,7 @@ _public_ int sd_bus_set_allow_interactive_authorization(sd_bus *bus, int b) {
|
||||
|
||||
_public_ int sd_bus_get_allow_interactive_authorization(sd_bus *bus) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
return bus->allow_interactive_authorization;
|
||||
@@ -381,6 +453,7 @@ _public_ int sd_bus_get_allow_interactive_authorization(sd_bus *bus) {
|
||||
|
||||
_public_ int sd_bus_set_watch_bind(sd_bus *bus, int b) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -390,6 +463,7 @@ _public_ int sd_bus_set_watch_bind(sd_bus *bus, int b) {
|
||||
|
||||
_public_ int sd_bus_get_watch_bind(sd_bus *bus) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
return bus->watch_bind;
|
||||
@@ -397,6 +471,7 @@ _public_ int sd_bus_get_watch_bind(sd_bus *bus) {
|
||||
|
||||
_public_ int sd_bus_set_connected_signal(sd_bus *bus, int b) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -406,6 +481,7 @@ _public_ int sd_bus_set_connected_signal(sd_bus *bus, int b) {
|
||||
|
||||
_public_ int sd_bus_get_connected_signal(sd_bus *bus) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
return bus->connected_signal;
|
||||
@@ -1113,6 +1189,7 @@ _public_ int sd_bus_start(sd_bus *bus) {
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state == BUS_UNSET, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -1488,6 +1565,7 @@ _public_ sd_bus *sd_bus_unref(sd_bus *bus) {
|
||||
_public_ int sd_bus_is_open(sd_bus *bus) {
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
return BUS_IS_OPEN(bus->state);
|
||||
@@ -1495,6 +1573,7 @@ _public_ int sd_bus_is_open(sd_bus *bus) {
|
||||
|
||||
_public_ int sd_bus_is_ready(sd_bus *bus) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
return bus->state == BUS_RUNNING;
|
||||
@@ -1504,6 +1583,7 @@ _public_ int sd_bus_can_send(sd_bus *bus, char type) {
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->state != BUS_UNSET, -ENOTCONN);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -1528,6 +1608,7 @@ _public_ int sd_bus_get_bus_id(sd_bus *bus, sd_id128_t *id) {
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(id, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -2128,6 +2209,7 @@ fail:
|
||||
_public_ int sd_bus_get_fd(sd_bus *bus) {
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(bus->input_fd == bus->output_fd, -EPERM);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -2147,6 +2229,7 @@ _public_ int sd_bus_get_events(sd_bus *bus) {
|
||||
int flags = 0;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
switch (bus->state) {
|
||||
@@ -2192,6 +2275,7 @@ _public_ int sd_bus_get_timeout(sd_bus *bus, uint64_t *timeout_usec) {
|
||||
struct reply_callback *c;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(timeout_usec, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -2833,6 +2917,7 @@ static int bus_process_internal(sd_bus *bus, bool hint_priority, int64_t priorit
|
||||
* means *ret is filled in with an unprocessed message. */
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
/* We don't allow recursively invoking sd_bus_process(). */
|
||||
@@ -2964,6 +3049,7 @@ static int bus_poll(sd_bus *bus, bool need_more, uint64_t timeout_usec) {
|
||||
_public_ int sd_bus_wait(sd_bus *bus, uint64_t timeout_usec) {
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
if (bus->state == BUS_CLOSING)
|
||||
@@ -2982,6 +3068,7 @@ _public_ int sd_bus_flush(sd_bus *bus) {
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
if (bus->state == BUS_CLOSING)
|
||||
@@ -3030,6 +3117,7 @@ _public_ int sd_bus_add_filter(
|
||||
sd_bus_slot *s;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(callback, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -3128,6 +3216,7 @@ static int bus_add_match_full(
|
||||
int r = 0;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(match, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -3426,6 +3515,7 @@ _public_ int sd_bus_attach_event(sd_bus *bus, sd_event *event, int priority) {
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus->event, -EBUSY);
|
||||
|
||||
assert(!bus->input_io_event_source);
|
||||
@@ -3479,6 +3569,7 @@ fail:
|
||||
|
||||
_public_ int sd_bus_detach_event(sd_bus *bus) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
|
||||
if (!bus->event)
|
||||
return 0;
|
||||
@@ -3567,36 +3658,11 @@ _public_ int sd_bus_default_user(sd_bus **ret) {
|
||||
}
|
||||
|
||||
_public_ int sd_bus_default(sd_bus **ret) {
|
||||
int (*bus_open)(sd_bus **) = NULL;
|
||||
sd_bus **busp;
|
||||
|
||||
const char *e;
|
||||
|
||||
/* Let's try our best to reuse another cached connection. If
|
||||
* the starter bus type is set, connect via our normal
|
||||
* connection logic, ignoring $DBUS_STARTER_ADDRESS, so that
|
||||
* we can share the connection with the user/system default
|
||||
* bus. */
|
||||
|
||||
e = secure_getenv("DBUS_STARTER_BUS_TYPE");
|
||||
if (e) {
|
||||
if (streq(e, "system"))
|
||||
return sd_bus_default_system(ret);
|
||||
else if (STR_IN_SET(e, "user", "session"))
|
||||
return sd_bus_default_user(ret);
|
||||
}
|
||||
|
||||
/* No type is specified, so we have not other option than to
|
||||
* use the starter address if it is set. */
|
||||
e = secure_getenv("DBUS_STARTER_ADDRESS");
|
||||
if (e)
|
||||
return bus_default(sd_bus_open, &default_starter_bus, ret);
|
||||
|
||||
/* Finally, if nothing is set use the cached connection for
|
||||
* the right scope */
|
||||
|
||||
if (cg_pid_get_owner_uid(0, NULL) >= 0)
|
||||
return sd_bus_default_user(ret);
|
||||
else
|
||||
return sd_bus_default_system(ret);
|
||||
busp = bus_choose_default(&bus_open);
|
||||
return bus_default(bus_open, busp, ret);
|
||||
}
|
||||
|
||||
_public_ int sd_bus_get_tid(sd_bus *b, pid_t *tid) {
|
||||
@@ -3823,6 +3889,7 @@ _public_ int sd_bus_path_decode_many(const char *path, const char *path_template
|
||||
|
||||
_public_ int sd_bus_try_close(sd_bus *bus) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
return -EOPNOTSUPP;
|
||||
@@ -3830,6 +3897,7 @@ _public_ int sd_bus_try_close(sd_bus *bus) {
|
||||
|
||||
_public_ int sd_bus_get_description(sd_bus *bus, const char **description) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(description, -EINVAL);
|
||||
assert_return(bus->description, -ENXIO);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
@@ -3858,6 +3926,7 @@ int bus_get_root_path(sd_bus *bus) {
|
||||
|
||||
_public_ int sd_bus_get_scope(sd_bus *bus, const char **scope) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(scope, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -3877,6 +3946,7 @@ _public_ int sd_bus_get_scope(sd_bus *bus, const char **scope) {
|
||||
_public_ int sd_bus_get_address(sd_bus *bus, const char **address) {
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(address, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -3890,6 +3960,7 @@ _public_ int sd_bus_get_address(sd_bus *bus, const char **address) {
|
||||
|
||||
_public_ int sd_bus_get_creds_mask(sd_bus *bus, uint64_t *mask) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(mask, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
@@ -3899,6 +3970,7 @@ _public_ int sd_bus_get_creds_mask(sd_bus *bus, uint64_t *mask) {
|
||||
|
||||
_public_ int sd_bus_is_bus_client(sd_bus *bus) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
return bus->bus_client;
|
||||
@@ -3906,6 +3978,7 @@ _public_ int sd_bus_is_bus_client(sd_bus *bus) {
|
||||
|
||||
_public_ int sd_bus_is_server(sd_bus *bus) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
return bus->is_server;
|
||||
@@ -3913,6 +3986,7 @@ _public_ int sd_bus_is_server(sd_bus *bus) {
|
||||
|
||||
_public_ int sd_bus_is_anonymous(sd_bus *bus) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
return bus->anonymous_auth;
|
||||
@@ -3920,6 +3994,7 @@ _public_ int sd_bus_is_anonymous(sd_bus *bus) {
|
||||
|
||||
_public_ int sd_bus_is_trusted(sd_bus *bus) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
return bus->trusted;
|
||||
@@ -3927,6 +4002,7 @@ _public_ int sd_bus_is_trusted(sd_bus *bus) {
|
||||
|
||||
_public_ int sd_bus_is_monitor(sd_bus *bus) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
return bus->is_monitor;
|
||||
@@ -3951,6 +4027,7 @@ _public_ void sd_bus_default_flush_close(void) {
|
||||
|
||||
_public_ int sd_bus_set_exit_on_disconnect(sd_bus *bus, int b) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
|
||||
/* Turns on exit-on-disconnect, and triggers it immediately if the bus connection was already
|
||||
* disconnected. Note that this is triggered exclusively on disconnections triggered by the server side, never
|
||||
@@ -3963,12 +4040,14 @@ _public_ int sd_bus_set_exit_on_disconnect(sd_bus *bus, int b) {
|
||||
|
||||
_public_ int sd_bus_get_exit_on_disconnect(sd_bus *bus) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
|
||||
return bus->exit_on_disconnect;
|
||||
}
|
||||
|
||||
_public_ int sd_bus_set_sender(sd_bus *bus, const char *sender) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(!bus->bus_client, -EPERM);
|
||||
assert_return(!sender || service_name_is_valid(sender), -EINVAL);
|
||||
|
||||
@@ -3977,6 +4056,7 @@ _public_ int sd_bus_set_sender(sd_bus *bus, const char *sender) {
|
||||
|
||||
_public_ int sd_bus_get_sender(sd_bus *bus, const char **ret) {
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(ret, -EINVAL);
|
||||
|
||||
if (!bus->patch_sender)
|
||||
|
@@ -240,8 +240,14 @@ struct sd_event {
|
||||
unsigned delays[sizeof(usec_t) * 8];
|
||||
};
|
||||
|
||||
static thread_local sd_event *default_event = NULL;
|
||||
|
||||
static void source_disconnect(sd_event_source *s);
|
||||
|
||||
static sd_event *event_resolve(sd_event *e) {
|
||||
return e == SD_EVENT_DEFAULT ? default_event : e;
|
||||
}
|
||||
|
||||
static int pending_prioq_compare(const void *a, const void *b) {
|
||||
const sd_event_source *x = a, *y = b;
|
||||
|
||||
@@ -967,6 +973,7 @@ _public_ int sd_event_add_io(
|
||||
int r;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(fd >= 0, -EBADF);
|
||||
assert_return(!(events & ~(EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLPRI|EPOLLERR|EPOLLHUP|EPOLLET)), -EINVAL);
|
||||
assert_return(callback, -EINVAL);
|
||||
@@ -1067,6 +1074,7 @@ _public_ int sd_event_add_time(
|
||||
int r;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(accuracy != (uint64_t) -1, -EINVAL);
|
||||
assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
@@ -1148,6 +1156,7 @@ _public_ int sd_event_add_signal(
|
||||
int r;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(SIGNAL_VALID(sig), -EINVAL);
|
||||
assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
@@ -1207,6 +1216,7 @@ _public_ int sd_event_add_child(
|
||||
int r;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(pid > 1, -EINVAL);
|
||||
assert_return(!(options & ~(WEXITED|WSTOPPED|WCONTINUED)), -EINVAL);
|
||||
assert_return(options != 0, -EINVAL);
|
||||
@@ -1264,6 +1274,7 @@ _public_ int sd_event_add_defer(
|
||||
int r;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(callback, -EINVAL);
|
||||
assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
@@ -1298,6 +1309,7 @@ _public_ int sd_event_add_post(
|
||||
int r;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(callback, -EINVAL);
|
||||
assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
@@ -1336,6 +1348,7 @@ _public_ int sd_event_add_exit(
|
||||
int r;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(callback, -EINVAL);
|
||||
assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
@@ -2449,6 +2462,7 @@ _public_ int sd_event_prepare(sd_event *e) {
|
||||
int r;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
|
||||
assert_return(e->state == SD_EVENT_INITIAL, -EBUSY);
|
||||
@@ -2506,6 +2520,7 @@ _public_ int sd_event_wait(sd_event *e, uint64_t timeout) {
|
||||
int r, m, i;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
|
||||
assert_return(e->state == SD_EVENT_ARMED, -EBUSY);
|
||||
@@ -2612,6 +2627,7 @@ _public_ int sd_event_dispatch(sd_event *e) {
|
||||
int r;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
|
||||
assert_return(e->state == SD_EVENT_PENDING, -EBUSY);
|
||||
@@ -2653,6 +2669,7 @@ _public_ int sd_event_run(sd_event *e, uint64_t timeout) {
|
||||
int r;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
|
||||
assert_return(e->state == SD_EVENT_INITIAL, -EBUSY);
|
||||
@@ -2697,6 +2714,7 @@ _public_ int sd_event_loop(sd_event *e) {
|
||||
int r;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
assert_return(e->state == SD_EVENT_INITIAL, -EBUSY);
|
||||
|
||||
@@ -2718,6 +2736,7 @@ finish:
|
||||
_public_ int sd_event_get_fd(sd_event *e) {
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
|
||||
return e->epoll_fd;
|
||||
@@ -2725,6 +2744,7 @@ _public_ int sd_event_get_fd(sd_event *e) {
|
||||
|
||||
_public_ int sd_event_get_state(sd_event *e) {
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
|
||||
return e->state;
|
||||
@@ -2732,6 +2752,7 @@ _public_ int sd_event_get_state(sd_event *e) {
|
||||
|
||||
_public_ int sd_event_get_exit_code(sd_event *e, int *code) {
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(code, -EINVAL);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
|
||||
@@ -2744,6 +2765,7 @@ _public_ int sd_event_get_exit_code(sd_event *e, int *code) {
|
||||
|
||||
_public_ int sd_event_exit(sd_event *e, int code) {
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
|
||||
@@ -2755,6 +2777,7 @@ _public_ int sd_event_exit(sd_event *e, int code) {
|
||||
|
||||
_public_ int sd_event_now(sd_event *e, clockid_t clock, uint64_t *usec) {
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(usec, -EINVAL);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
|
||||
@@ -2779,8 +2802,6 @@ _public_ int sd_event_now(sd_event *e, clockid_t clock, uint64_t *usec) {
|
||||
}
|
||||
|
||||
_public_ int sd_event_default(sd_event **ret) {
|
||||
|
||||
static thread_local sd_event *default_event = NULL;
|
||||
sd_event *e = NULL;
|
||||
int r;
|
||||
|
||||
@@ -2806,6 +2827,7 @@ _public_ int sd_event_default(sd_event **ret) {
|
||||
|
||||
_public_ int sd_event_get_tid(sd_event *e, pid_t *tid) {
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(tid, -EINVAL);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
|
||||
@@ -2821,6 +2843,7 @@ _public_ int sd_event_set_watchdog(sd_event *e, int b) {
|
||||
int r;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
|
||||
if (e->watchdog == !!b)
|
||||
@@ -2871,6 +2894,7 @@ fail:
|
||||
|
||||
_public_ int sd_event_get_watchdog(sd_event *e) {
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
|
||||
return e->watchdog;
|
||||
@@ -2878,6 +2902,7 @@ _public_ int sd_event_get_watchdog(sd_event *e) {
|
||||
|
||||
_public_ int sd_event_get_iteration(sd_event *e, uint64_t *ret) {
|
||||
assert_return(e, -EINVAL);
|
||||
assert_return(e = event_resolve(e), -ENOPKG);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
|
||||
*ret = e->iteration;
|
||||
|
@@ -33,6 +33,10 @@
|
||||
|
||||
_SD_BEGIN_DECLARATIONS;
|
||||
|
||||
#define SD_BUS_DEFAULT ((sd_bus *) 1)
|
||||
#define SD_BUS_DEFAULT_USER ((sd_bus *) 2)
|
||||
#define SD_BUS_DEFAULT_SYSTEM ((sd_bus *) 3)
|
||||
|
||||
/* Types */
|
||||
|
||||
typedef struct sd_bus sd_bus;
|
||||
|
@@ -40,6 +40,8 @@
|
||||
|
||||
_SD_BEGIN_DECLARATIONS;
|
||||
|
||||
#define SD_EVENT_DEFAULT ((sd_event *) 1)
|
||||
|
||||
typedef struct sd_event sd_event;
|
||||
typedef struct sd_event_source sd_event_source;
|
||||
|
||||
|
Reference in New Issue
Block a user