Let's group this HandleAction types in nice little helpers.
Prompted by #28579
else
supported = true;
- if (!supported && IN_SET(handle, HANDLE_HIBERNATE, HANDLE_HYBRID_SLEEP, HANDLE_SUSPEND_THEN_HIBERNATE)) {
+ if (!supported && HANDLE_ACTION_IS_SLEEP(handle) && handle != HANDLE_SUSPEND) {
supported = can_sleep(SLEEP_SUSPEND) > 0;
if (supported) {
log_notice("Requested %s operation is not supported, using regular suspend instead.",
typedef enum HandleAction {
HANDLE_IGNORE,
HANDLE_POWEROFF,
+ _HANDLE_ACTION_SHUTDOWN_FIRST = HANDLE_POWEROFF,
HANDLE_REBOOT,
HANDLE_HALT,
HANDLE_KEXEC,
HANDLE_SOFT_REBOOT,
+ _HANDLE_ACTION_SHUTDOWN_LAST = HANDLE_SOFT_REBOOT,
HANDLE_SUSPEND,
+ _HANDLE_ACTION_SLEEP_FIRST = HANDLE_SUSPEND,
HANDLE_HIBERNATE,
HANDLE_HYBRID_SLEEP,
HANDLE_SUSPEND_THEN_HIBERNATE,
+ _HANDLE_ACTION_SLEEP_LAST = HANDLE_SUSPEND_THEN_HIBERNATE,
HANDLE_LOCK,
HANDLE_FACTORY_RESET,
_HANDLE_ACTION_MAX,
return a >= 0 && a < _HANDLE_ACTION_MAX;
}
+static inline bool HANDLE_ACTION_IS_SHUTDOWN(HandleAction a) {
+ return a >= _HANDLE_ACTION_SHUTDOWN_FIRST && a <= _HANDLE_ACTION_SHUTDOWN_LAST;
+}
+
+static inline bool HANDLE_ACTION_IS_SLEEP(HandleAction a) {
+ return a >= _HANDLE_ACTION_SLEEP_FIRST && a <= _HANDLE_ACTION_SLEEP_LAST;
+}
+
struct HandleActionData {
HandleAction handle;
const char *target;
}
handle = handle_action_from_string(type);
- if (!IN_SET(handle, HANDLE_POWEROFF, HANDLE_REBOOT, HANDLE_SOFT_REBOOT, HANDLE_HALT, HANDLE_KEXEC))
- return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Unsupported shutdown type");
+ if (!HANDLE_ACTION_IS_SHUTDOWN(handle))
+ return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unsupported shutdown type: %s", type);
a = handle_action_lookup(handle);
assert(a);
* can assume that if the system enters sleep or hibernation, this will be visible in an obvious way
* for any local user. And once the systems exits sleep or hibernation, the notification would be
* just noise, in particular for auto-suspend. */
- if (is_local &&
- IN_SET(m->scheduled_shutdown_action->handle,
- HANDLE_SUSPEND,
- HANDLE_HIBERNATE,
- HANDLE_HYBRID_SLEEP,
- HANDLE_SUSPEND_THEN_HIBERNATE))
+ if (is_local && HANDLE_ACTION_IS_SLEEP(m->scheduled_shutdown_action->handle))
return false;
return !streq_ptr(p, m->scheduled_shutdown_tty);