On 2014/08/18 15:46, Daurnimator wrote:
> The %s specifier in strftime doesn't respect timezones.
> 
> Example:
> 
>     #include <time.h>
>     #include <stdio.h>
> 
>     int main() {
>         time_t t = 1234567890;
>         struct tm *tmp = gmtime(&t);
>         char output[200];
>         strftime(output, 200, "%s", tmp);
>         printf("%s\n",output);
>         return 0;
>     }
> 
> Run with a non UTC timezone. e.g. TZ=GMT+9
> Output will be 1234600290 instead of expected 1234567890
> 
> Location in OpenBSD's libc:
> http://anoncvs.estpak.ee/cgi-bin/cgit/openbsd-src/tree/lib/libc/time/strftime.c#n300
> 
> This bug also exists in FreeBSD's libc:
> https://svnweb.freebsd.org/base/release/10.0.0/lib/libc/stdtime/strftime.c?view=markup#l312
> Bug filed at https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=192016
> 
> This bug also exists in glibc:
> http://fossies.org/dox/glibc-2.19/strftime__l_8c_source.html#l01133
> Bug filed at https://sourceware.org/bugzilla/show_bug.cgi?id=17189
> 
> It does not occur in musl:
> http://git.musl-libc.org/cgit/musl/tree/src/time/strftime.c?id=ac0acd569e01735fc6052d43fdf57f3a07c93f3d#n127
> 

%s is not specified by posix/sus, so it is implementation-specific.

That said, given that you have just found 3 implementations which have
the same (frankly IMHO sensible) behaviour, musl seems to be the odd one out.

Reply via email to