we need to pass back the rtc device name that was actually used so that we can turn around and check its sysfs status

This commit is contained in:
Mike Frysinger 2008-02-15 07:19:03 +00:00
parent ea915363e7
commit 977bc6a137
4 changed files with 17 additions and 15 deletions

View File

@ -10,7 +10,7 @@
#include "libbb.h" #include "libbb.h"
extern int rtc_adjtime_is_utc(void); 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); extern time_t rtc_read_time(int fd, int utc);

View File

@ -40,21 +40,23 @@ int rtc_adjtime_is_utc(void)
return utc; return utc;
} }
int rtc_xopen(const char *default_rtc, int flags) int rtc_xopen(const char **default_rtc, int flags)
{ {
int rtc; int rtc;
if (!default_rtc) { if (!*default_rtc) {
rtc = open("/dev/rtc", flags); *default_rtc = "/dev/rtc";
rtc = open(*default_rtc, flags);
if (rtc >= 0) if (rtc >= 0)
return rtc; return rtc;
rtc = open("/dev/rtc0", flags); *default_rtc = "/dev/rtc0";
rtc = open(*default_rtc, flags);
if (rtc >= 0) if (rtc >= 0)
return rtc; 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 rtc_read_time(int fd, int utc)

View File

@ -25,7 +25,7 @@ static time_t read_rtc(int utc)
time_t ret; time_t ret;
int fd; int fd;
fd = rtc_xopen(rtcname, O_RDONLY); fd = rtc_xopen(&rtcname, O_RDONLY);
ret = rtc_read_time(fd, utc); ret = rtc_read_time(fd, utc);
close(fd); close(fd);
@ -35,7 +35,7 @@ static time_t read_rtc(int utc)
static void write_rtc(time_t t, int utc) static void write_rtc(time_t t, int utc)
{ {
struct tm tm; struct tm tm;
int rtc = rtc_xopen(rtcname, O_WRONLY); int rtc = rtc_xopen(&rtcname, O_WRONLY);
tm = *(utc ? gmtime(&t) : localtime(&t)); tm = *(utc ? gmtime(&t) : localtime(&t));
tm.tm_isdst = 0; tm.tm_isdst = 0;

View File

@ -45,7 +45,7 @@ static int may_wakeup(const char *rtcname)
return 0; return 0;
/* wakeup events could be disabled or not supported */ /* 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) static void setup_alarm(int fd, time_t *wakeup)
@ -159,11 +159,11 @@ int rtcwake_main(int argc, char **argv)
/* the rtcname is relative to /dev */ /* the rtcname is relative to /dev */
xchdir("/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 */ /* 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 */ /* relative or absolute alarm time, normalized to time_t */
sys_time = time(0); sys_time = time(0);
@ -184,7 +184,7 @@ int rtcwake_main(int argc, char **argv)
fflush(stdout); fflush(stdout);
usleep(10 * 1000); usleep(10 * 1000);
if (!strcmp(suspend, "on")) if (strcmp(suspend, "on"))
suspend_system(suspend); suspend_system(suspend);
else { else {
/* "fake" suspend ... we'll do the delay ourselves */ /* "fake" suspend ... we'll do the delay ourselves */