123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- --- uClibc/libc/misc/time/time.c (revision 16488)
- +++ uClibc/libc/misc/time/time.c (working copy)
- @@ -157,6 +157,22 @@
- #define TZNAME_MAX _POSIX_TZNAME_MAX
- #endif
-
- +#if defined (L_tzset) || defined (L_localtime_r) || defined(L_strftime) || \
- + defined(L__time_mktime) || defined(L__time_mktime_tzi) || \
- + ((defined(L_strftime) || defined(L_strftime_l)) && \
- + defined(__UCLIBC_HAS_XLOCALE__))
- +
- +void _time_tzset (int);
- +
- +#ifndef L__time_mktime
- +
- + /* Jan 1, 2007 Z - tm = 0,0,0,1,0,107,1,0,0 */
- +
- +const static time_t new_rule_starts = 1167609600;
- +
- +#endif
- +#endif
- +
- /**********************************************************************/
- /* The era code is currently unfinished. */
- /* #define ENABLE_ERA_CODE */
- @@ -532,7 +548,7 @@
- {
- __UCLIBC_MUTEX_LOCK(_time_tzlock);
-
- - tzset();
- + _time_tzset(*timer < new_rule_starts);
-
- __time_localtime_tzi(timer, result, _time_tzinfo);
-
- @@ -956,7 +972,8 @@
- unsigned char mod;
- unsigned char code;
-
- - tzset(); /* We'll, let's get this out of the way. */
- + /* We'll, let's get this out of the way. */
- + _time_tzset(_time_mktime((struct tm *) timeptr, 0) < new_rule_starts);
-
- lvl = 0;
- p = format;
- @@ -1644,7 +1661,9 @@
- 6, 0, 0, /* Note: overloaded for non-M non-J case... */
- 0, 1, 0, /* J */
- ',', 'M', '4', '.', '1', '.', '0',
- - ',', 'M', '1', '0', '.', '5', '.', '0', 0
- + ',', 'M', '1', '0', '.', '5', '.', '0', 0,
- + ',', 'M', '3', '.', '2', '.', '0',
- + ',', 'M', '1', '1', '.', '1', '.', '0', 0
- };
-
- #define TZ vals
- @@ -1652,6 +1671,7 @@
- #define RANGE (vals + 7)
- #define RULE (vals + 11 - 1)
- #define DEFAULT_RULES (vals + 22)
- +#define DEFAULT_2007_RULES (vals + 38)
-
- /* Initialize to UTC. */
- int daylight = 0;
- @@ -1774,6 +1794,11 @@
-
- void tzset(void)
- {
- + _time_tzset((time(NULL)) < new_rule_starts);
- +}
- +
- +void _time_tzset(int use_old_rules)
- +{
- register const char *e;
- register char *s;
- long off;
- @@ -1896,7 +1921,15 @@
- } else { /* OK, we have dst, so get some rules. */
- count = 0;
- if (!*e) { /* No rules so default to US rules. */
- - e = DEFAULT_RULES;
- + e = use_old_rules ? DEFAULT_RULES : DEFAULT_2007_RULES;
- +#ifdef DEBUG_TZSET
- + if (e == DEFAULT_RULES)
- + printf("tzset: Using old rules.\n");
- + else if (e == DEFAULT_2007_RULES)
- + printf("tzset: Using new rules\n");
- + else
- + printf("tzset: Using undefined rules\n");
- +#endif /* DEBUG_TZSET */
- }
-
- do {
- @@ -2230,6 +2263,8 @@
- --d;
- }
-
- + _time_tzset (x.tm_year < 2007); /* tm_year was expanded above */
- +
- #ifdef __BCC__
- d = p[5] - 1;
- days = -719163L + ((long)d)*365 + ((d/4) - (d/100) + (d/400) + p[3] + p[7]);
|