From e6d1dc94165943374451f3c7639c0ed0a2c3a6b3 Mon Sep 17 00:00:00 2001 From: Lawrence Rust Date: Thu, 10 Feb 2011 10:02:20 +0100 Subject: rtcwake: test for available suspend modes Signed-off-by: Lawrence Rust --- sys-utils/rtcwake.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'sys-utils/rtcwake.c') diff --git a/sys-utils/rtcwake.c b/sys-utils/rtcwake.c index da8c085fe..5b54537a3 100644 --- a/sys-utils/rtcwake.c +++ b/sys-utils/rtcwake.c @@ -247,6 +247,24 @@ static int setup_alarm(int fd, time_t *wakeup) return 0; } +static int is_suspend_available(const char *suspend) +{ + int rc; + char buf[32]; + FILE *f = fopen(SYS_POWER_STATE_PATH, "r"); + + if (!f) + return -1; + + if (fgets(buf, sizeof buf, f) == NULL) + rc = -1; + else + rc = strstr(buf, suspend) != NULL; + + fclose(f); + return rc; +} + static void suspend_system(const char *suspend) { FILE *f = fopen(SYS_POWER_STATE_PATH, "w"); @@ -501,6 +519,11 @@ int main(int argc, char **argv) alarm, sys_time, rtc_time, seconds); if (strcmp(suspend, "show") && strcmp(suspend, "disable")) { + if (strcmp(suspend, "no") && strcmp(suspend, "on") && + strcmp(suspend, "off") && is_suspend_available(suspend) <= 0) { + errx(EXIT_FAILURE, _("suspend to \"%s\" unavailable"), suspend); + } + /* care about alarm setup only if the show|disable * modes are not set */ -- cgit v1.2.3-55-g7522