Magellan Linux

Contents of /trunk/mkinitrd-magellan/busybox/libbb/rtc.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 984 - (show annotations) (download)
Sun May 30 11:32:42 2010 UTC (13 years, 11 months ago) by niro
File MIME type: text/plain
File size: 1490 byte(s)
-updated to busybox-1.16.1 and enabled blkid/uuid support in default config
1 /*
2 * Common RTC functions
3 *
4 * Licensed under GPLv2, see file LICENSE in this tarball for details.
5 */
6
7 #include "libbb.h"
8 #include "rtc_.h"
9
10 #if ENABLE_FEATURE_HWCLOCK_ADJTIME_FHS
11 # define ADJTIME_PATH "/var/lib/hwclock/adjtime"
12 #else
13 # define ADJTIME_PATH "/etc/adjtime"
14 #endif
15
16 int FAST_FUNC rtc_adjtime_is_utc(void)
17 {
18 int utc = 0;
19 FILE *f = fopen_for_read(ADJTIME_PATH);
20
21 if (f) {
22 char buffer[128];
23
24 while (fgets(buffer, sizeof(buffer), f)) {
25 int len = strlen(buffer);
26
27 while (len && isspace(buffer[len - 1]))
28 len--;
29
30 buffer[len] = 0;
31
32 if (strncmp(buffer, "UTC", 3) == 0) {
33 utc = 1;
34 break;
35 }
36 }
37 fclose(f);
38 }
39
40 return utc;
41 }
42
43 int FAST_FUNC rtc_xopen(const char **default_rtc, int flags)
44 {
45 int rtc;
46
47 if (!*default_rtc) {
48 *default_rtc = "/dev/rtc";
49 rtc = open(*default_rtc, flags);
50 if (rtc >= 0)
51 return rtc;
52 *default_rtc = "/dev/rtc0";
53 rtc = open(*default_rtc, flags);
54 if (rtc >= 0)
55 return rtc;
56 *default_rtc = "/dev/misc/rtc";
57 }
58
59 return xopen(*default_rtc, flags);
60 }
61
62 void FAST_FUNC rtc_read_tm(struct tm *ptm, int fd)
63 {
64 memset(ptm, 0, sizeof(*ptm));
65 xioctl(fd, RTC_RD_TIME, ptm);
66 ptm->tm_isdst = -1; /* "not known" */
67 }
68
69 time_t FAST_FUNC rtc_tm2time(struct tm *ptm, int utc)
70 {
71 char *oldtz = oldtz; /* for compiler */
72 time_t t;
73
74 if (utc) {
75 oldtz = getenv("TZ");
76 putenv((char*)"TZ=UTC0");
77 tzset();
78 }
79
80 t = mktime(ptm);
81
82 if (utc) {
83 unsetenv("TZ");
84 if (oldtz)
85 putenv(oldtz - 3);
86 tzset();
87 }
88
89 return t;
90 }