* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
*/
-
-#include <sys/ioctl.h>
#include <sys/utsname.h>
#include <getopt.h>
#include "libbb.h"
int rtc = xopen_rtc(O_RDONLY);
memset(&tm, 0, sizeof(struct tm));
- if (ioctl(rtc, RTC_RD_TIME, &tm) < 0)
- bb_perror_msg_and_die("cannot read time from RTC");
+ xioctl(rtc, RTC_RD_TIME, &tm);
tm.tm_isdst = -1; /* not known */
close(rtc);
if (utc) {
oldtz = getenv("TZ");
- setenv("TZ", "UTC 0", 1);
+ putenv((char*)"TZ=UTC0");
tzset();
}
t = mktime(&tm);
if (utc) {
+ unsetenv("TZ");
if (oldtz)
- setenv("TZ", oldtz, 1);
- else
- unsetenv("TZ");
+ putenv(oldtz - 3);
tzset();
}
return t;
tm = *(utc ? gmtime(&t) : localtime(&t));
tm.tm_isdst = 0;
- if (ioctl(rtc, RTC_SET_TIME, &tm) < 0)
- bb_perror_msg_and_die("cannot set the RTC time");
+ xioctl(rtc, RTC_SET_TIME, &tm);
close(rtc);
}
-static int show_clock(int utc)
+static void show_clock(int utc)
{
- struct tm *ptm;
+ //struct tm *ptm;
time_t t;
- RESERVE_CONFIG_BUFFER(buffer, 64);
+ char *cp;
t = read_rtc(utc);
- ptm = localtime(&t); /* Sets 'tzname[]' */
-
- safe_strncpy(buffer, ctime(&t), 64);
- if (buffer[0])
- buffer[strlen(buffer) - 1] = 0;
+ //ptm = localtime(&t); /* Sets 'tzname[]' */
- //printf("%s %.6f seconds %s\n", buffer, 0.0, utc ? "" : (ptm->tm_isdst ? tzname[1] : tzname[0]));
- printf( "%s %.6f seconds\n", buffer, 0.0);
- RELEASE_CONFIG_BUFFER(buffer);
+ cp = ctime(&t);
+ if (cp[0])
+ cp[strlen(cp) - 1] = '\0';
- return 0;
+ //printf("%s %.6f seconds %s\n", cp, 0.0, utc ? "" : (ptm->tm_isdst ? tzname[1] : tzname[0]));
+ printf("%s 0.000000 seconds\n", cp);
}
-static int to_sys_clock(int utc)
+static void to_sys_clock(int utc)
{
- struct timeval tv = { 0, 0 };
+ struct timeval tv;
const struct timezone tz = { timezone/60 - 60*daylight, 0 };
tv.tv_sec = read_rtc(utc);
-
+ tv.tv_usec = 0;
if (settimeofday(&tv, &tz))
bb_perror_msg_and_die("settimeofday() failed");
-
- return 0;
}
-static int from_sys_clock(int utc)
+static void from_sys_clock(int utc)
{
- struct timeval tv = { 0, 0 };
- struct timezone tz = { 0, 0 };
-
- if (gettimeofday(&tv, &tz))
- bb_perror_msg_and_die("gettimeofday() failed");
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ //if (gettimeofday(&tv, NULL))
+ // bb_perror_msg_and_die("gettimeofday() failed");
write_rtc(tv.tv_sec, utc);
- return 0;
}
#ifdef CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS
#define HWCLOCK_OPT_SYSTOHC 0x10
#define HWCLOCK_OPT_RTCFILE 0x20
-int hwclock_main(int argc, char **argv );
-int hwclock_main(int argc, char **argv )
+int hwclock_main(int argc, char **argv);
+int hwclock_main(int argc, char **argv)
{
unsigned opt;
int utc;
utc = check_utc();
if (opt & HWCLOCK_OPT_HCTOSYS) {
- return to_sys_clock(utc);
+ to_sys_clock(utc);
+ return 0;
}
- else if (opt & HWCLOCK_OPT_SYSTOHC) {
- return from_sys_clock(utc);
- } else {
- /* default HWCLOCK_OPT_SHOW */
- return show_clock(utc);
+ if (opt & HWCLOCK_OPT_SYSTOHC) {
+ from_sys_clock(utc);
+ return 0;
}
+ /* default HWCLOCK_OPT_SHOW */
+ show_clock(utc);
+ return 0;
}