]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
logind: simplify flags handling a bit
authorLennart Poettering <lennart@poettering.net>
Tue, 2 Feb 2021 14:27:30 +0000 (15:27 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 3 Feb 2021 08:22:59 +0000 (17:22 +0900)
Let's split out the two codepaths a bit, and emphasize which ones it the
new-style and which the old-style codepath, and let's clearly convert
the params of the old-stye into the new style for further processing, so
that the old style path is brief and isolated.

No change in behaviour.

Follow-up for: 8885fed4e3a52cf1bf105e42043203c485ed9d92

src/login/logind-dbus.c

index 8f27fe7ee9f175475f799a8e4a535d2235627c15..7e55173e27e6f01204222b360c35c2075755a090 100644 (file)
@@ -1871,8 +1871,8 @@ static int method_do_shutdown_or_sleep(
                 bool with_flags,
                 sd_bus_error *error) {
 
-        int interactive = false, r;
-        uint64_t flags = 0;
+        uint64_t flags;
+        int r;
 
         assert(m);
         assert(message);
@@ -1880,19 +1880,25 @@ static int method_do_shutdown_or_sleep(
         assert(w >= 0);
         assert(w <= _INHIBIT_WHAT_MAX);
 
-        if (with_flags)
+        if (with_flags) {
+                /* New style method: with flags parameter (and interactive bool in the bus message header) */
                 r = sd_bus_message_read(message, "t", &flags);
-        else
-                r = sd_bus_message_read(message, "b", &interactive);
-
-        if (r < 0)
-                return r;
+                if (r < 0)
+                        return r;
+                if ((flags & ~SD_LOGIND_SHUTDOWN_AND_SLEEP_FLAGS_PUBLIC) != 0)
+                        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid flags parameter");
+        } else {
+                /* Old style method: no flags parameter, but interactive bool passed as boolean in
+                 * payload. Let's convert this argument to the new-style flags parameter for our internal
+                 * use. */
+                int interactive;
 
-        if (with_flags && (flags & ~SD_LOGIND_SHUTDOWN_AND_SLEEP_FLAGS_PUBLIC))
-                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
-                                         "Invalid flags parameter");
+                r = sd_bus_message_read(message, "b", &interactive);
+                if (r < 0)
+                        return r;
 
-        SET_FLAG(flags, SD_LOGIND_INTERACTIVE, interactive);
+                flags = interactive ? SD_LOGIND_INTERACTIVE : 0;
+        }
 
         /* Don't allow multiple jobs being executed at the same time */
         if (m->action_what > 0)