X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Feloginctl.c;h=644686ad25173abe43ba93476b2fe46a2f89fd93;hb=564def2927f3ca556724d4777ce29bb59304f28c;hp=111c770b5c9719751cfea881b22729b35bca1529;hpb=40f140beb3f640c0fa6674478f990d57d10704b4;p=elogind.git diff --git a/src/login/eloginctl.c b/src/login/eloginctl.c index 111c770b5..644686ad2 100644 --- a/src/login/eloginctl.c +++ b/src/login/eloginctl.c @@ -48,13 +48,14 @@ static const struct { HandleAction action; const char* verb; } action_table[_ACTION_MAX] = { - [ACTION_HALT] = { HANDLE_HALT, "halt" }, - [ACTION_POWEROFF] = { HANDLE_POWEROFF, "poweroff", }, - [ACTION_REBOOT] = { HANDLE_REBOOT, "reboot", }, - [ACTION_KEXEC] = { HANDLE_KEXEC, "kexec", }, - [ACTION_SUSPEND] = { HANDLE_SUSPEND, "suspend", }, - [ACTION_HIBERNATE] = { HANDLE_HIBERNATE, "hibernate", }, - [ACTION_HYBRID_SLEEP] = { HANDLE_HYBRID_SLEEP, "hybrid-sleep" } + [ACTION_HALT] = { HANDLE_HALT, "halt" }, + [ACTION_POWEROFF] = { HANDLE_POWEROFF, "poweroff", }, + [ACTION_REBOOT] = { HANDLE_REBOOT, "reboot", }, + [ACTION_KEXEC] = { HANDLE_KEXEC, "kexec", }, + [ACTION_SUSPEND] = { HANDLE_SUSPEND, "suspend", }, + [ACTION_HIBERNATE] = { HANDLE_HIBERNATE, "hibernate", }, + [ACTION_HYBRID_SLEEP] = { HANDLE_HYBRID_SLEEP, "hybrid-sleep" }, + [ACTION_SUSPEND_THEN_HIBERNATE] = { HANDLE_SUSPEND_THEN_HIBERNATE, "suspend-then-hibernate" } /* ACTION_CANCEL_SHUTDOWN is handled differently */ }; @@ -262,6 +263,12 @@ static void elogind_log_special(enum elogind_action a) { "MESSAGE_ID=" SD_MESSAGE_SLEEP_START_STR, NULL); break; + case ACTION_SUSPEND_THEN_HIBERNATE: + log_struct(LOG_INFO, + LOG_MESSAGE("Suspend-Then-Hibernate action called."), + "MESSAGE_ID=" SD_MESSAGE_SLEEP_START_STR, + NULL); + break; case ACTION_CANCEL_SHUTDOWN: log_struct(LOG_INFO, LOG_MESSAGE("Cancel Shutdown called."), @@ -322,6 +329,11 @@ static int elogind_reboot(sd_bus *bus, enum elogind_action a) { description = "put system into hybrid sleep"; break; + case ACTION_SUSPEND_THEN_HIBERNATE: + method = "SuspendThenHibernate"; + description = "put system into suspend followed by hibernate"; + break; + default: return -EINVAL; } @@ -570,7 +582,8 @@ int start_special(int argc, char *argv[], void *userdata) { ACTION_REBOOT, ACTION_SUSPEND, ACTION_HIBERNATE, - ACTION_HYBRID_SLEEP)) { + ACTION_HYBRID_SLEEP, + ACTION_SUSPEND_THEN_HIBERNATE)) { if (arg_when > 0) return elogind_schedule_shutdown(bus, a); else