summaryrefslogtreecommitdiffstats
path: root/sys-utils/rtcwake.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys-utils/rtcwake.c')
-rw-r--r--sys-utils/rtcwake.c23
1 files changed, 23 insertions, 0 deletions
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
*/