Skip to content

Commit c8cd8ca

Browse files
committed
sleep: use SleepOperation enum everywhere and drop sleep_settings()
Instead of comparing strings everywhere, let's use the new enum. This allows us to drop sleep_settings(), since the operation enum can be directly used as index into the config settings. Some minor other refactoring is done, but mostly just shifting thing around a bit, no actual change in behaviour.
1 parent be2a4b0 commit c8cd8ca

File tree

6 files changed

+150
-179
lines changed

6 files changed

+150
-179
lines changed

src/login/logind-action.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,20 +102,20 @@ int manager_handle_action(
102102
}
103103

104104
if (handle == HANDLE_SUSPEND)
105-
supported = can_sleep("suspend") > 0;
105+
supported = can_sleep(SLEEP_SUSPEND) > 0;
106106
else if (handle == HANDLE_HIBERNATE)
107-
supported = can_sleep("hibernate") > 0;
107+
supported = can_sleep(SLEEP_HIBERNATE) > 0;
108108
else if (handle == HANDLE_HYBRID_SLEEP)
109-
supported = can_sleep("hybrid-sleep") > 0;
109+
supported = can_sleep(SLEEP_HYBRID_SLEEP) > 0;
110110
else if (handle == HANDLE_SUSPEND_THEN_HIBERNATE)
111-
supported = can_sleep("suspend-then-hibernate") > 0;
111+
supported = can_sleep(SLEEP_SUSPEND_THEN_HIBERNATE) > 0;
112112
else if (handle == HANDLE_KEXEC)
113113
supported = access(KEXEC, X_OK) >= 0;
114114
else
115115
supported = true;
116116

117117
if (!supported && IN_SET(handle, HANDLE_HIBERNATE, HANDLE_HYBRID_SLEEP, HANDLE_SUSPEND_THEN_HIBERNATE)) {
118-
supported = can_sleep("suspend") > 0;
118+
supported = can_sleep(SLEEP_SUSPEND) > 0;
119119
if (supported) {
120120
log_notice("Requested %s operation is not supported, using regular suspend instead.",
121121
handle_action_to_string(handle));

src/login/logind-dbus.c

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1851,7 +1851,7 @@ static int method_do_shutdown_or_sleep(
18511851
const char *action,
18521852
const char *action_multiple_sessions,
18531853
const char *action_ignore_inhibit,
1854-
const char *sleep_verb,
1854+
SleepOperation sleep_operation,
18551855
bool with_flags,
18561856
sd_bus_error *error) {
18571857

@@ -1894,14 +1894,14 @@ static int method_do_shutdown_or_sleep(
18941894
return sd_bus_error_setf(error, BUS_ERROR_OPERATION_IN_PROGRESS,
18951895
"There's already a shutdown or sleep operation in progress");
18961896

1897-
if (sleep_verb) {
1898-
r = can_sleep(sleep_verb);
1897+
if (sleep_operation >= 0) {
1898+
r = can_sleep(sleep_operation);
18991899
if (r == -ENOSPC)
19001900
return sd_bus_error_set(error, BUS_ERROR_SLEEP_VERB_NOT_SUPPORTED,
19011901
"Not enough swap space for hibernation");
19021902
if (r == 0)
19031903
return sd_bus_error_setf(error, BUS_ERROR_SLEEP_VERB_NOT_SUPPORTED,
1904-
"Sleep verb \"%s\" not supported", sleep_verb);
1904+
"Sleep verb \"%s\" not supported", sleep_operation_to_string(sleep_operation));
19051905
if (r < 0)
19061906
return r;
19071907
}
@@ -1928,7 +1928,7 @@ static int method_poweroff(sd_bus_message *message, void *userdata, sd_bus_error
19281928
"org.freedesktop.login1.power-off",
19291929
"org.freedesktop.login1.power-off-multiple-sessions",
19301930
"org.freedesktop.login1.power-off-ignore-inhibit",
1931-
NULL,
1931+
_SLEEP_OPERATION_INVALID,
19321932
sd_bus_message_is_method_call(message, NULL, "PowerOffWithFlags"),
19331933
error);
19341934
}
@@ -1943,7 +1943,7 @@ static int method_reboot(sd_bus_message *message, void *userdata, sd_bus_error *
19431943
"org.freedesktop.login1.reboot",
19441944
"org.freedesktop.login1.reboot-multiple-sessions",
19451945
"org.freedesktop.login1.reboot-ignore-inhibit",
1946-
NULL,
1946+
_SLEEP_OPERATION_INVALID,
19471947
sd_bus_message_is_method_call(message, NULL, "RebootWithFlags"),
19481948
error);
19491949
}
@@ -1958,7 +1958,7 @@ static int method_halt(sd_bus_message *message, void *userdata, sd_bus_error *er
19581958
"org.freedesktop.login1.halt",
19591959
"org.freedesktop.login1.halt-multiple-sessions",
19601960
"org.freedesktop.login1.halt-ignore-inhibit",
1961-
NULL,
1961+
_SLEEP_OPERATION_INVALID,
19621962
sd_bus_message_is_method_call(message, NULL, "HaltWithFlags"),
19631963
error);
19641964
}
@@ -1973,7 +1973,7 @@ static int method_suspend(sd_bus_message *message, void *userdata, sd_bus_error
19731973
"org.freedesktop.login1.suspend",
19741974
"org.freedesktop.login1.suspend-multiple-sessions",
19751975
"org.freedesktop.login1.suspend-ignore-inhibit",
1976-
"suspend",
1976+
SLEEP_SUSPEND,
19771977
sd_bus_message_is_method_call(message, NULL, "SuspendWithFlags"),
19781978
error);
19791979
}
@@ -1988,7 +1988,7 @@ static int method_hibernate(sd_bus_message *message, void *userdata, sd_bus_erro
19881988
"org.freedesktop.login1.hibernate",
19891989
"org.freedesktop.login1.hibernate-multiple-sessions",
19901990
"org.freedesktop.login1.hibernate-ignore-inhibit",
1991-
"hibernate",
1991+
SLEEP_HIBERNATE,
19921992
sd_bus_message_is_method_call(message, NULL, "HibernateWithFlags"),
19931993
error);
19941994
}
@@ -2003,7 +2003,7 @@ static int method_hybrid_sleep(sd_bus_message *message, void *userdata, sd_bus_e
20032003
"org.freedesktop.login1.hibernate",
20042004
"org.freedesktop.login1.hibernate-multiple-sessions",
20052005
"org.freedesktop.login1.hibernate-ignore-inhibit",
2006-
"hybrid-sleep",
2006+
SLEEP_HYBRID_SLEEP,
20072007
sd_bus_message_is_method_call(message, NULL, "HybridSleepWithFlags"),
20082008
error);
20092009
}
@@ -2018,7 +2018,7 @@ static int method_suspend_then_hibernate(sd_bus_message *message, void *userdata
20182018
"org.freedesktop.login1.hibernate",
20192019
"org.freedesktop.login1.hibernate-multiple-sessions",
20202020
"org.freedesktop.login1.hibernate-ignore-inhibit",
2021-
"hybrid-sleep",
2021+
SLEEP_SUSPEND_THEN_HIBERNATE,
20222022
sd_bus_message_is_method_call(message, NULL, "SuspendThenHibernateWithFlags"),
20232023
error);
20242024
}
@@ -2317,7 +2317,7 @@ static int method_can_shutdown_or_sleep(
23172317
const char *action,
23182318
const char *action_multiple_sessions,
23192319
const char *action_ignore_inhibit,
2320-
const char *sleep_verb,
2320+
SleepOperation sleep_operation,
23212321
sd_bus_error *error) {
23222322

23232323
_cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
@@ -2335,8 +2335,8 @@ static int method_can_shutdown_or_sleep(
23352335
assert(action_multiple_sessions);
23362336
assert(action_ignore_inhibit);
23372337

2338-
if (sleep_verb) {
2339-
r = can_sleep(sleep_verb);
2338+
if (sleep_operation >= 0) {
2339+
r = can_sleep(sleep_operation);
23402340
if (IN_SET(r, 0, -ENOSPC))
23412341
return sd_bus_reply_method_return(message, "s", "na");
23422342
if (r < 0)
@@ -2358,7 +2358,7 @@ static int method_can_shutdown_or_sleep(
23582358
multiple_sessions = r > 0;
23592359
blocked = manager_is_inhibited(m, w, INHIBIT_BLOCK, NULL, false, true, uid, NULL);
23602360

2361-
handle = handle_action_from_string(sleep_verb);
2361+
handle = handle_action_from_string(sleep_operation_to_string(sleep_operation));
23622362
if (handle >= 0) {
23632363
const char *target;
23642364

@@ -2434,7 +2434,7 @@ static int method_can_poweroff(sd_bus_message *message, void *userdata, sd_bus_e
24342434
"org.freedesktop.login1.power-off",
24352435
"org.freedesktop.login1.power-off-multiple-sessions",
24362436
"org.freedesktop.login1.power-off-ignore-inhibit",
2437-
NULL,
2437+
_SLEEP_OPERATION_INVALID,
24382438
error);
24392439
}
24402440

@@ -2447,7 +2447,7 @@ static int method_can_reboot(sd_bus_message *message, void *userdata, sd_bus_err
24472447
"org.freedesktop.login1.reboot",
24482448
"org.freedesktop.login1.reboot-multiple-sessions",
24492449
"org.freedesktop.login1.reboot-ignore-inhibit",
2450-
NULL,
2450+
_SLEEP_OPERATION_INVALID,
24512451
error);
24522452
}
24532453

@@ -2460,7 +2460,7 @@ static int method_can_halt(sd_bus_message *message, void *userdata, sd_bus_error
24602460
"org.freedesktop.login1.halt",
24612461
"org.freedesktop.login1.halt-multiple-sessions",
24622462
"org.freedesktop.login1.halt-ignore-inhibit",
2463-
NULL,
2463+
_SLEEP_OPERATION_INVALID,
24642464
error);
24652465
}
24662466

@@ -2473,7 +2473,7 @@ static int method_can_suspend(sd_bus_message *message, void *userdata, sd_bus_er
24732473
"org.freedesktop.login1.suspend",
24742474
"org.freedesktop.login1.suspend-multiple-sessions",
24752475
"org.freedesktop.login1.suspend-ignore-inhibit",
2476-
"suspend",
2476+
SLEEP_SUSPEND,
24772477
error);
24782478
}
24792479

@@ -2486,7 +2486,7 @@ static int method_can_hibernate(sd_bus_message *message, void *userdata, sd_bus_
24862486
"org.freedesktop.login1.hibernate",
24872487
"org.freedesktop.login1.hibernate-multiple-sessions",
24882488
"org.freedesktop.login1.hibernate-ignore-inhibit",
2489-
"hibernate",
2489+
SLEEP_HIBERNATE,
24902490
error);
24912491
}
24922492

@@ -2499,7 +2499,7 @@ static int method_can_hybrid_sleep(sd_bus_message *message, void *userdata, sd_b
24992499
"org.freedesktop.login1.hibernate",
25002500
"org.freedesktop.login1.hibernate-multiple-sessions",
25012501
"org.freedesktop.login1.hibernate-ignore-inhibit",
2502-
"hybrid-sleep",
2502+
SLEEP_HYBRID_SLEEP,
25032503
error);
25042504
}
25052505

@@ -2512,7 +2512,7 @@ static int method_can_suspend_then_hibernate(sd_bus_message *message, void *user
25122512
"org.freedesktop.login1.hibernate",
25132513
"org.freedesktop.login1.hibernate-multiple-sessions",
25142514
"org.freedesktop.login1.hibernate-ignore-inhibit",
2515-
"suspend-then-hibernate",
2515+
SLEEP_SUSPEND_THEN_HIBERNATE,
25162516
error);
25172517
}
25182518

0 commit comments

Comments
 (0)