X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsleep%2Fsleep.c;h=cc1ffa63f1efeb28f7e00b2e69bbed848e2e5198;hb=502184de0f95d3a124d4d4c77ae7a88747a0fac2;hp=b6a6f60d03452fb9680a156717938e70d7018039;hpb=eb9da376d76b48585b3b63b4f91903b54f7abd36;p=elogind.git diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c index b6a6f60d0..cc1ffa63f 100644 --- a/src/sleep/sleep.c +++ b/src/sleep/sleep.c @@ -25,14 +25,15 @@ #include #include -#include "systemd/sd-id128.h" -#include "systemd/sd-messages.h" +#include "sd-id128.h" +#include "sd-messages.h" #include "log.h" #include "util.h" #include "strv.h" #include "fileio.h" #include "build.h" #include "sleep-config.h" +#include "def.h" static char* arg_verb = NULL; @@ -41,97 +42,97 @@ static int write_mode(char **modes) { char **mode; STRV_FOREACH(mode, modes) { - int k = write_string_file("/sys/power/disk", *mode); + int k; + + k = write_string_file("/sys/power/disk", *mode); if (k == 0) return 0; - log_debug("Failed to write '%s' to /sys/power/disk: %s", - *mode, strerror(-k)); + + log_debug_errno(k, "Failed to write '%s' to /sys/power/disk: %m", + *mode); if (r == 0) r = k; } if (r < 0) - log_error("Failed to write mode to /sys/power/disk: %s", - strerror(-r)); + log_error_errno(r, "Failed to write mode to /sys/power/disk: %m"); return r; } -static int write_state(FILE *f0, char **states) { - FILE _cleanup_fclose_ *f = f0; +static int write_state(FILE **f, char **states) { char **state; int r = 0; STRV_FOREACH(state, states) { int k; - k = write_string_to_file(f, *state); + k = write_string_stream(*f, *state); if (k == 0) return 0; - log_debug("Failed to write '%s' to /sys/power/state: %s", - *state, strerror(-k)); + log_debug_errno(k, "Failed to write '%s' to /sys/power/state: %m", + *state); if (r == 0) r = k; - fclose(f); - f = fopen("/sys/power/state", "we"); - if (!f) { - log_error("Failed to open /sys/power/state: %m"); - return -errno; - } + fclose(*f); + *f = fopen("/sys/power/state", "we"); + if (!*f) + return log_error_errno(errno, "Failed to open /sys/power/state: %m"); } return r; } static int execute(char **modes, char **states) { - char* arguments[4]; + + char *arguments[] = { + NULL, + (char*) "pre", + arg_verb, + NULL + }; + static const char* const dirs[] = {SYSTEM_SLEEP_PATH, NULL}; + int r; - FILE *f; - const char* note = strappenda("SLEEP=", arg_verb); + _cleanup_fclose_ FILE *f = NULL; /* This file is opened first, so that if we hit an error, - * we can abort before modyfing any state. */ + * we can abort before modifying any state. */ f = fopen("/sys/power/state", "we"); - if (!f) { - log_error("Failed to open /sys/power/state: %m"); - return -errno; - } + if (!f) + return log_error_errno(errno, "Failed to open /sys/power/state: %m"); /* Configure the hibernation mode */ r = write_mode(modes); if (r < 0) return r; - arguments[0] = NULL; - arguments[1] = (char*) "pre"; - arguments[2] = arg_verb; - arguments[3] = NULL; - execute_directory(SYSTEM_SLEEP_PATH, NULL, arguments); + execute_directories(dirs, DEFAULT_TIMEOUT_USEC, arguments); log_struct(LOG_INFO, - MESSAGE_ID(SD_MESSAGE_SLEEP_START), - "MESSAGE=Suspending system...", - note, + LOG_MESSAGE_ID(SD_MESSAGE_SLEEP_START), + LOG_MESSAGE("Suspending system..."), + "SLEEP=%s", arg_verb, NULL); - r = write_state(f, states); + r = write_state(&f, states); if (r < 0) return r; log_struct(LOG_INFO, - MESSAGE_ID(SD_MESSAGE_SLEEP_STOP), - "MESSAGE=System resumed.", - note, + LOG_MESSAGE_ID(SD_MESSAGE_SLEEP_STOP), + LOG_MESSAGE("System resumed."), + "SLEEP=%s", arg_verb, NULL); arguments[1] = (char*) "post"; - execute_directory(SYSTEM_SLEEP_PATH, NULL, arguments); + execute_directories(dirs, DEFAULT_TIMEOUT_USEC, arguments); return r; } -static int help(void) { +static void help(void) { printf("%s COMMAND\n\n" "Suspend the system, hibernate the system, or both.\n\n" "Commands:\n" @@ -140,10 +141,7 @@ static int help(void) { " suspend Suspend the system\n" " hibernate Hibernate the system\n" " hybrid-sleep Both hibernate and suspend the system\n" - , program_invocation_short_name - ); - - return 0; + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -162,10 +160,11 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "+h", options, NULL)) >= 0) + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch(c) { case 'h': - return help(); + help(); + return 0; /* done */ case ARG_VERSION: puts(PACKAGE_STRING);