diff options
Diffstat (limited to 'src/sleep')
-rw-r--r-- | src/sleep/sleep.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c index 87efd0ac7..e740a26e7 100644 --- a/src/sleep/sleep.c +++ b/src/sleep/sleep.c @@ -149,7 +149,6 @@ static int execute(Manager *m, const char *verb) { streq(arg_verb, "hibernate") ? m->hibernate_state : m->hybrid_sleep_state; #endif // 0 - char *arguments[] = { NULL, (char*) "pre", @@ -180,7 +179,7 @@ static int execute(Manager *m, const char *verb) { return log_error_errno(r, "Failed to write mode to /sys/power/disk: %m");; } - execute_directories(dirs, DEFAULT_TIMEOUT_USEC, NULL, NULL, arguments); + execute_directories(dirs, DEFAULT_TIMEOUT_USEC, NULL, NULL, arguments, NULL); log_struct(LOG_INFO, "MESSAGE_ID=" SD_MESSAGE_SLEEP_START_STR, @@ -189,15 +188,18 @@ static int execute(Manager *m, const char *verb) { r = write_state(&f, states); if (r < 0) - return log_error_errno(r, "Failed to write /sys/power/state: %m"); - - log_struct(LOG_INFO, - "MESSAGE_ID=" SD_MESSAGE_SLEEP_STOP_STR, - LOG_MESSAGE("System resumed."), - "SLEEP=%s", arg_verb); + log_struct_errno(LOG_ERR, r, + "MESSAGE_ID=" SD_MESSAGE_SLEEP_STOP_STR, + LOG_MESSAGE("Failed to suspend system. System resumed again: %m"), + "SLEEP=%s", arg_verb); + else + log_struct(LOG_INFO, + "MESSAGE_ID=" SD_MESSAGE_SLEEP_STOP_STR, + LOG_MESSAGE("System resumed."), + "SLEEP=%s", arg_verb); arguments[1] = (char*) "post"; - execute_directories(dirs, DEFAULT_TIMEOUT_USEC, NULL, NULL, arguments); + execute_directories(dirs, DEFAULT_TIMEOUT_USEC, NULL, NULL, arguments, NULL); return r; } @@ -242,13 +244,11 @@ static int execute_s2h(Manager *m) { int r; #if 0 /// Already parsed by elogind config - r = parse_sleep_config("suspend", &suspend_modes, &suspend_states, - NULL); + r = parse_sleep_config("suspend", NULL, &suspend_modes, &suspend_states, NULL); if (r < 0) return r; - r = parse_sleep_config("hibernate", &hibernate_modes, - &hibernate_states, NULL); + r = parse_sleep_config("hibernate", NULL, &hibernate_modes, &hibernate_states, NULL); if (r < 0) return r; #endif // 0 @@ -363,6 +363,7 @@ static int parse_argv(int argc, char *argv[]) { } int main(int argc, char *argv[]) { + bool allow; _cleanup_strv_free_ char **modes = NULL, **states = NULL; usec_t delay = 0; int r; @@ -375,10 +376,15 @@ int main(int argc, char *argv[]) { if (r <= 0) goto finish; - r = parse_sleep_config(arg_verb, &modes, &states, &delay); + r = parse_sleep_config(arg_verb, &allow, &modes, &states, &delay); if (r < 0) goto finish; + if (!allow) { + log_error("Sleep mode \"%s\" is disabled by configuration, refusing.", arg_verb); + return EXIT_FAILURE; + } + if (streq(arg_verb, "suspend-then-hibernate")) r = execute_s2h(delay); else |