From: Lawrence Rust Date: Thu, 10 Feb 2011 09:02:20 +0000 (+0100) Subject: rtcwake: test for available suspend modes X-Git-Tag: v2.20-rc1~506 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e6d1dc94165943374451f3c7639c0ed0a2c3a6b3;p=thirdparty%2Futil-linux.git rtcwake: test for available suspend modes Signed-off-by: Lawrence Rust --- diff --git a/sys-utils/rtcwake.c b/sys-utils/rtcwake.c index da8c085fea..5b54537a32 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 */