#include "libbb.h"
extern int rtc_adjtime_is_utc(void);
-extern int rtc_xopen(const char *default_rtc, int flags);
+extern int rtc_xopen(const char **default_rtc, int flags);
extern time_t rtc_read_time(int fd, int utc);
return utc;
}
-int rtc_xopen(const char *default_rtc, int flags)
+int rtc_xopen(const char **default_rtc, int flags)
{
int rtc;
- if (!default_rtc) {
- rtc = open("/dev/rtc", flags);
+ if (!*default_rtc) {
+ *default_rtc = "/dev/rtc";
+ rtc = open(*default_rtc, flags);
if (rtc >= 0)
return rtc;
- rtc = open("/dev/rtc0", flags);
+ *default_rtc = "/dev/rtc0";
+ rtc = open(*default_rtc, flags);
if (rtc >= 0)
return rtc;
- default_rtc = "/dev/misc/rtc";
+ *default_rtc = "/dev/misc/rtc";
}
- return xopen(default_rtc, flags);
+ return xopen(*default_rtc, flags);
}
time_t rtc_read_time(int fd, int utc)
time_t ret;
int fd;
- fd = rtc_xopen(rtcname, O_RDONLY);
+ fd = rtc_xopen(&rtcname, O_RDONLY);
ret = rtc_read_time(fd, utc);
close(fd);
static void write_rtc(time_t t, int utc)
{
struct tm tm;
- int rtc = rtc_xopen(rtcname, O_WRONLY);
+ int rtc = rtc_xopen(&rtcname, O_WRONLY);
tm = *(utc ? gmtime(&t) : localtime(&t));
tm.tm_isdst = 0;
return 0;
/* wakeup events could be disabled or not supported */
- return strcmp(buf, "enabled\n") == 0;
+ return strncmp(buf, "enabled\n", 8) == 0;
}
static void setup_alarm(int fd, time_t *wakeup)
/* the rtcname is relative to /dev */
xchdir("/dev");
- if (strcmp(suspend, "on") != 0 && !may_wakeup(rtcname))
- bb_error_msg_and_die("%s not enabled for wakeup events", rtcname);
-
/* this RTC must exist and (if we'll sleep) be wakeup-enabled */
- fd = rtc_xopen(rtcname, O_RDONLY);
+ fd = rtc_xopen(&rtcname, O_RDONLY);
+
+ if (strcmp(suspend, "on") && !may_wakeup(rtcname))
+ bb_error_msg_and_die("%s not enabled for wakeup events", rtcname);
/* relative or absolute alarm time, normalized to time_t */
sys_time = time(0);
fflush(stdout);
usleep(10 * 1000);
- if (!strcmp(suspend, "on"))
+ if (strcmp(suspend, "on"))
suspend_system(suspend);
else {
/* "fake" suspend ... we'll do the delay ourselves */