1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
5 #include "event-source.h"
6 #include "event-util.h"
8 #include "string-util.h"
16 sd_event_time_handler_t callback
,
19 const char *description
,
31 r
= sd_event_source_get_enabled(*s
, &enabled
);
33 return log_debug_errno(r
, "sd-event: Failed to query whether event source \"%s\" is enabled or not: %m",
34 strna((*s
)->description
?: description
));
36 if (enabled
!= SD_EVENT_OFF
)
40 r
= sd_event_source_get_time_clock(*s
, &c
);
42 return log_debug_errno(r
, "sd-event: Failed to get clock id of event source \"%s\": %m", strna((*s
)->description
?: description
));
45 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL
),
46 "sd-event: Current clock id %i of event source \"%s\" is different from specified one %i.",
48 strna((*s
)->description
? : description
),
51 r
= sd_event_source_set_time(*s
, usec
);
53 return log_debug_errno(r
, "sd-event: Failed to set time for event source \"%s\": %m", strna((*s
)->description
?: description
));
55 r
= sd_event_source_set_time_accuracy(*s
, accuracy
);
57 return log_debug_errno(r
, "sd-event: Failed to set accuracy for event source \"%s\": %m", strna((*s
)->description
?: description
));
59 /* callback function is not updated, as we do not have sd_event_source_set_time_callback(). */
61 (void) sd_event_source_set_userdata(*s
, userdata
);
63 r
= sd_event_source_set_enabled(*s
, SD_EVENT_ONESHOT
);
65 return log_debug_errno(r
, "sd-event: Failed to enable event source \"%s\": %m", strna((*s
)->description
?: description
));
67 r
= sd_event_add_time(e
, s
, clock
, usec
, accuracy
, callback
, userdata
);
69 return log_debug_errno(r
, "sd-event: Failed to create timer event \"%s\": %m", strna(description
));
74 r
= sd_event_source_set_priority(*s
, priority
);
76 return log_debug_errno(r
, "sd-event: Failed to set priority for event source \"%s\": %m", strna((*s
)->description
?: description
));
79 r
= sd_event_source_set_description(*s
, description
);
81 return log_debug_errno(r
, "sd-event: Failed to set description for event source \"%s\": %m", description
);
87 int event_reset_time_relative(
93 sd_event_time_handler_t callback
,
96 const char *description
,
104 r
= sd_event_now(e
, clock
, &usec_now
);
106 return log_debug_errno(r
, "sd-event: Failed to get the current time: %m");
108 return event_reset_time(e
, s
, clock
, usec_add(usec_now
, usec
), accuracy
, callback
, userdata
, priority
, description
, force_reset
);
111 int event_source_disable(sd_event_source
*s
) {
115 return sd_event_source_set_enabled(s
, SD_EVENT_OFF
);
118 int event_source_is_enabled(sd_event_source
*s
) {
122 return sd_event_source_get_enabled(s
, NULL
);