From: Lennart Poettering Date: Fri, 29 Sep 2023 20:17:12 +0000 (+0200) Subject: logind: add HANDLE_ACTION_IS_SLEEP() and HANDLE_ACTION_IS_SHUTDOWN() helpers X-Git-Tag: v255-rc1~376 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cb88da825460c410139a9a3041af849ee2d01d5b;p=thirdparty%2Fsystemd.git logind: add HANDLE_ACTION_IS_SLEEP() and HANDLE_ACTION_IS_SHUTDOWN() helpers Let's group this HandleAction types in nice little helpers. Prompted by #28579 --- diff --git a/src/login/logind-action.c b/src/login/logind-action.c index 4eaf6a78178..54ff795c0d8 100644 --- a/src/login/logind-action.c +++ b/src/login/logind-action.c @@ -213,7 +213,7 @@ int manager_handle_action( 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.", diff --git a/src/login/logind-action.h b/src/login/logind-action.h index dfef6400e93..dbca963f2d5 100644 --- a/src/login/logind-action.h +++ b/src/login/logind-action.h @@ -6,14 +6,18 @@ 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, @@ -30,6 +34,14 @@ static inline bool handle_action_valid(HandleAction a) { 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; diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 698d4f18cf1..1d3bdac53d4 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -2259,8 +2259,8 @@ static int method_schedule_shutdown(sd_bus_message *message, void *userdata, sd_ } 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); diff --git a/src/login/logind-wall.c b/src/login/logind-wall.c index aa735223340..97b74e9e042 100644 --- a/src/login/logind-wall.c +++ b/src/login/logind-wall.c @@ -52,12 +52,7 @@ bool logind_wall_tty_filter(const char *tty, bool is_local, void *userdata) { * 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);