#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <langinfo.h>
#include <locale.h>
#include <time.h>
#include <limits.h>
#include "libc.h"
+#include "time_impl.h"
const char *__nl_langinfo_l(nl_item, locale_t);
return val;
}
+const char *__tm_to_tzname(const struct tm *);
size_t __strftime_l(char *restrict, size_t, const char *restrict, const struct tm *restrict, locale_t);
const char *__strftime_fmt_1(char (*s)[100], size_t *l, int f, const struct tm *tm, locale_t loc)
fmt = "%m/%d/%y";
goto recu_strftime;
case 'e':
- val = tm->tm_mday;
- goto number;
+ *l = snprintf(*s, sizeof *s, "%2d", tm->tm_mday);
+ return *s;
case 'F':
fmt = "%Y-%m-%d";
goto recu_strftime;
case 'R':
fmt = "%H:%M";
goto recu_strftime;
+ case 's':
+ val = __tm_to_secs(tm) + tm->__tm_gmtoff;
+ goto number;
case 'S':
val = tm->tm_sec;
goto number;
width = 4;
goto number;
case 'z':
- val = -tm->__tm_gmtoff;
- *l = snprintf(*s, sizeof *s, "%+.2d%.2d", val/3600, abs(val%3600)/60);
+ if (tm->tm_isdst < 0) {
+ *l = 0;
+ return "";
+ }
+ *l = snprintf(*s, sizeof *s, "%+.2d%.2d",
+ (-tm->__tm_gmtoff)/3600,
+ abs(tm->__tm_gmtoff%3600)/60);
return *s;
case 'Z':
- fmt = tm->__tm_zone;
+ if (tm->tm_isdst < 0) {
+ *l = 0;
+ return "";
+ }
+ fmt = __tm_to_tzname(tm);
goto string;
case '%':
*l = 1;