]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
logind: add HANDLE_ACTION_IS_SLEEP() and HANDLE_ACTION_IS_SHUTDOWN() helpers
authorLennart Poettering <lennart@poettering.net>
Fri, 29 Sep 2023 20:17:12 +0000 (22:17 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Sat, 30 Sep 2023 09:56:28 +0000 (10:56 +0100)
Let's group this HandleAction types in nice little helpers.

Prompted by #28579

src/login/logind-action.c
src/login/logind-action.h
src/login/logind-dbus.c
src/login/logind-wall.c

index 4eaf6a781787de3746f3cd7ede0af69775fc3131..54ff795c0d8f4915024b76e23c91f2ca7e2a80f1 100644 (file)
@@ -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.",
index dfef6400e930ba9101d215058cf0fa1a32b080d0..dbca963f2d53ea1437db41a701798424ee7dec3c 100644 (file)
@@ -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;
index 698d4f18cf1f7f941f440b9296e2f9eeaab826c5..1d3bdac53d423fae857ddd05ca72c40852df7507 100644 (file)
@@ -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);
index aa7352233407dc1b45b2c44ee050a23f516d217b..97b74e9e042d5b56613848fd2b7bfec3e8bf6aea 100644 (file)
@@ -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);