Contents of /tags/mkinitrd-6_1_6/busybox/libbb/rtc.c
Parent Directory | Revision Log
Revision 903 -
(show annotations)
(download)
Wed Aug 5 19:21:45 2009 UTC (15 years, 1 month ago) by niro
File MIME type: text/plain
File size: 1404 byte(s)
Wed Aug 5 19:21:45 2009 UTC (15 years, 1 month ago) by niro
File MIME type: text/plain
File size: 1404 byte(s)
tagged 'mkinitrd-6_1_6'
1 | /* |
2 | * Common RTC functions |
3 | */ |
4 | |
5 | #include "libbb.h" |
6 | #include "rtc_.h" |
7 | |
8 | #if ENABLE_FEATURE_HWCLOCK_ADJTIME_FHS |
9 | # define ADJTIME_PATH "/var/lib/hwclock/adjtime" |
10 | #else |
11 | # define ADJTIME_PATH "/etc/adjtime" |
12 | #endif |
13 | |
14 | int FAST_FUNC rtc_adjtime_is_utc(void) |
15 | { |
16 | int utc = 0; |
17 | FILE *f = fopen_for_read(ADJTIME_PATH); |
18 | |
19 | if (f) { |
20 | RESERVE_CONFIG_BUFFER(buffer, 128); |
21 | |
22 | while (fgets(buffer, sizeof(buffer), f)) { |
23 | int len = strlen(buffer); |
24 | |
25 | while (len && isspace(buffer[len - 1])) |
26 | len--; |
27 | |
28 | buffer[len] = 0; |
29 | |
30 | if (strncmp(buffer, "UTC", 3) == 0) { |
31 | utc = 1; |
32 | break; |
33 | } |
34 | } |
35 | fclose(f); |
36 | |
37 | RELEASE_CONFIG_BUFFER(buffer); |
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 | time_t FAST_FUNC rtc_read_time(int fd, int utc) |
63 | { |
64 | struct tm tm; |
65 | char *oldtz = 0; |
66 | time_t t = 0; |
67 | |
68 | memset(&tm, 0, sizeof(struct tm)); |
69 | xioctl(fd, RTC_RD_TIME, &tm); |
70 | tm.tm_isdst = -1; /* not known */ |
71 | |
72 | if (utc) { |
73 | oldtz = getenv("TZ"); |
74 | putenv((char*)"TZ=UTC0"); |
75 | tzset(); |
76 | } |
77 | |
78 | t = mktime(&tm); |
79 | |
80 | if (utc) { |
81 | unsetenv("TZ"); |
82 | if (oldtz) |
83 | putenv(oldtz - 3); |
84 | tzset(); |
85 | } |
86 | |
87 | return t; |
88 | } |