[tz] source code question regarding localtime.c PS

Arthur David Olson arthurdavidolson at gmail.com
Wed Aug 7 17:02:11 UTC 2013


 > Of course, there's no requirement that time_t values map to times in a
linear manner...

From...
    http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/types.h.html
...we have:
    time_t: Used for time in seconds.

    @dashdashado


On Wed, Aug 7, 2013 at 12:51 PM, Clive D.W. Feather <clive at davros.org>wrote:

> Paul Eggert said:
> > Thanks for mentioning the problem.  The code relies on undefined
> > behavior when a time_t value is outside int_fast64_t range.
> > It's better to avoid undefined behavior,
>
> > +     if (!TYPE_INTEGRAL(time_t)) {
> > +             if (INTMAX_MIN < t && t < INTMAX_MAX) {
>
> In principle UINTMAX_MAX could be larger than the largest value
> representable in time_t if it is (say) float. If so, the implicit
> conversion to float is undefined and you haven't solved the problem. You
> need to compare the various limits to decide which type can handle all the
> values of the other.
>
> Of course, there's no requirement that time_t values map to times in a
> linear manner - for example, an integral time_t could be split into bit
> fields holding hours, minutes, seconds, etc. That's why difftime() exists.
>
> --
> Clive D.W. Feather          | If you lie to the compiler,
> Email: clive at davros.org     | it will get its revenge.
> Web: http://www.davros.org  |   - Henry Spencer
> Mobile: +44 7973 377646
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mm.icann.org/pipermail/tz/attachments/20130807/3b744d97/attachment.html>


More information about the tz mailing list