X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Ftime%2Fstrftime.c;h=dac64037fb241d91b2e5ef4140624b1507c81195;hb=d1a2ead878c27ac4ec600740320f8b76e1f961e9;hp=6b8a33f5b356112f88f8e5eff30ddd0c3a045e89;hpb=fc48ceee773e851d8be675f25be4f476646aa99e;p=musl diff --git a/src/time/strftime.c b/src/time/strftime.c index 6b8a33f5..dac64037 100644 --- a/src/time/strftime.c +++ b/src/time/strftime.c @@ -1,10 +1,12 @@ #include #include +#include #include #include #include #include #include "libc.h" +#include "time_impl.h" const char *__nl_langinfo_l(nl_item, locale_t); @@ -42,6 +44,7 @@ static int week_num(const struct tm *tm) 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) @@ -78,8 +81,8 @@ const char *__strftime_fmt_1(char (*s)[100], size_t *l, int f, const struct tm * 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; @@ -121,6 +124,9 @@ const char *__strftime_fmt_1(char (*s)[100], size_t *l, int f, const struct tm * 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; @@ -165,11 +171,20 @@ const char *__strftime_fmt_1(char (*s)[100], size_t *l, int f, const struct tm * 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;