chiark / gitweb /
Handle suspend/hibernate/hybrid-suspend/shutdown/reboot directly
[elogind.git] / src / login / logind-action.c
index 16e1d9b59f6ce97a2b91db73fb23849343848335..7a57e1ba222ff63dead57fc6aa02f95e6b808dfd 100644 (file)
@@ -226,7 +226,8 @@ static int write_state(FILE **f, char **states) {
         return r;
 }
 
-static int do_sleep(const char *arg_verb, const char **modes, const char **states) {
+static int do_sleep(const char *arg_verb) {
+        _cleanup_strv_free_ char **modes = NULL, **states = NULL;
         char *arguments[] = {
                 NULL,
                 (char*) "pre",
@@ -237,6 +238,10 @@ static int do_sleep(const char *arg_verb, const char **modes, const char **state
         int r;
         _cleanup_fclose_ FILE *f = NULL;
 
+        r = parse_sleep_config(arg_verb, &modes, &states);
+        if (r < 0)
+                return r;
+
         /* This file is opened first, so that if we hit an error,
          * we can abort before modifying any state. */
         f = fopen("/sys/power/state", "we");
@@ -272,7 +277,7 @@ static int do_sleep(const char *arg_verb, const char **modes, const char **state
         return r;
 }
 
-int shutdown_or_sleep(Manager *m, HandleAction action) {
+int shutdown_or_sleep(HandleAction action) {
         switch (action) {
         case HANDLE_POWEROFF:
                 return run_helper(HALT);
@@ -283,11 +288,11 @@ int shutdown_or_sleep(Manager *m, HandleAction action) {
         case HANDLE_KEXEC:
                 return run_helper(KEXEC);
         case HANDLE_SUSPEND:
-                return do_sleep("suspend", m->suspend_mode, m->suspend_state);
+                return do_sleep("suspend");
         case HANDLE_HIBERNATE:
-                return do_sleep("hibernate", m->hibernate_mode, m->hibernate_state);
+                return do_sleep("hibernate");
         case HANDLE_HYBRID_SLEEP:
-                return do_sleep("hybrid-sleep", m->hybrid_sleep_mode, m->hybrid_sleep_state);
+                return do_sleep("hybrid-sleep");
         default:
                 return -EINVAL;
         }