int tm_yday; /* Days in year.[0-365] */
int tm_isdst; /* DST. [-1/0/1]*/
-#if 0
+#ifdef __UCLIBC_HAS_TM_EXTENSIONS__
# ifdef __USE_BSD
long int tm_gmtoff; /* Seconds east of UTC. */
- __const char *tm_zone; /* Timezone abbreviation. */
+ __const char tm_zone[8]; /* Timezone abbreviation. */
# else
long int __tm_gmtoff; /* Seconds east of UTC. */
- __const char *__tm_zone; /* Timezone abbreviation. */
+ __const char __tm_zone[8];/* Timezone abbreviation. */
# endif
-#endif
+#endif /* __UCLIBC_HAS_TM_EXTENSIONS__ */
};
char *ctime_r(const time_t *clock, char *buf)
{
- struct tm xtms;
+ struct tm xtm;
- return asctime_r(localtime_r(clock, &xtms), buf);
+ return asctime_r(localtime_r(clock, &xtm), buf);
}
#endif
*x = *timer + offset;
_time_t2tm(x, days, result);
-
- if (dst) {
- result->tm_isdst = dst;
- break;
- }
- ++dst;
- } while ((result->tm_isdst = tm_isdst(result)) != 0);
+ result->tm_isdst = dst;
+#ifdef __UCLIBC_HAS_TM_EXTENSIONS__
+ result->tm_gmtoff = - _time_tzinfo[dst].gmt_offset;
+ strcpy( (char *)(result->tm_zone), _time_tzinfo[dst].tzname);
+#endif /* __UCLIBC_HAS_TM_EXTENSIONS__ */
+ } while ((++dst < 2) && (result->tm_isdst = tm_isdst(result)) != 0);
TZUNLOCK;
/**********************************************************************/
#ifdef L_mktime
+/* Another name for `mktime'. */
+/* time_t timelocal(struct tm *tp) */
+weak_alias(mktime,timelocal);
+
time_t mktime(struct tm *timeptr)
{
return _time_mktime(timeptr, 1);
}
+
#endif
/**********************************************************************/
#ifdef L_strftime
size_t todo;
char *p = NULL;
- if ((fd = open(_PATH_TZ, O_RDONLY)) >= 0) {
+ if ((fd = open("/etc/TZ", O_RDONLY)) >= 0) {
todo = TZ_BUFLEN;
p = buf;
do {
) || !*e) { /* or set to empty string. */
ILLEGAL: /* TODO: Clean up the following... */
#ifdef __TIME_TZ_OPT_SPEED
- *oldval = 0; /* Set oldval tonnn empty string. */
+ *oldval = 0; /* Set oldval to an empty string. */
#endif /* __TIME_TZ_OPT_SPEED */
s = _time_tzinfo[0].tzname;
*s = 'U';
}
/* TODO -- should this be 0? */
p[4] = 0; /* result[8] .. tm_isdst */
+#ifdef __UCLIBC_HAS_TM_EXTENSIONS__
+ result->tm_gmtoff = 0;
+ {
+ register char *s = (char *) result->tm_zone;
+ *s = 'U';
+ *++s = 'T';
+ *++s = 'C';
+ *++s = 0;
+ }
+#endif /* __UCLIBC_HAS_TM_EXTENSIONS__ */
return result;
}
#endif
/**********************************************************************/
+#ifdef L_dysize
+/* Return the number of days in YEAR. */
+
+int dysize(int year)
+{
+ return __isleap(year) ? 366 : 365;
+}
+
+#endif
+/**********************************************************************/
+/* Like `mktime', but for TP represents Universal Time, not local time. */
+/* time_t timegm(struct tm *tp) */
+
+