Somewhere lies a bug.  The following code snippet:
#include <stdio.h>
#include <time.h>
int main()
{
    struct tm t;
    time_t now = time((void*)0);
    localtime_r(&now, &t);
    t.tm_isdst = 1;
    printf("%ld\n", mktime(&t));
    t.tm_isdst = 0;
    printf("%ld\n", mktime(&t));
    t.tm_isdst = -1;
    printf("%ld\n", mktime(&t));
}
Yields:
1618928503
1618932103
1618932103
This is true on FreeBSD 13 and Ubuntu 18.04, both fully patched.

-michael

On Tue, Apr 20, 2021 at 7:04 AM Richard Cochran <richardcoch...@gmail.com>
wrote:

> On Tue, Apr 20, 2021 at 11:44:06AM +0200, Lars Munch wrote:
> > tm_isdst needs to be initialized to make sure mktime does not fail
> > or calculates the wrong time.
>
> No, take a look at the mktime(3) man page.  There you will read the
> following.
>
>        The  mktime() function modifies the fields of the tm structure as
> fol‐
>        lows: tm_wday and tm_yday are set to values determined from  the
> con‐
>        tents  of  the  other  fields;  if structure members are outside
> their
>        valid interval, they will be normalized (so that, for example, 40
> Oc‐
>        tober  is changed into 9 November); tm_isdst is set (regardless of
> its
>        initial value) to a positive value or to 0, respectively, to
> indicate
>        whether DST is or is not in effect at the specified time.
>
> Thanks,
> Richard
>
>
> _______________________________________________
> Linuxptp-devel mailing list
> Linuxptp-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linuxptp-devel
>
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to