>From the bug reports:
"tm_isdst == 1 for UTC is invalid input for mktime" which makes perfect
sense.

See:
https://bugzilla.redhat.com/show_bug.cgi?id=1653340
https://sourceware.org/bugzilla/show_bug.cgi?id=24630

Seems glibc changed behaviour recently and my fix is perfectly valid.


On Wed, Apr 21, 2021 at 1:33 PM Geva, Erez <erez.geva....@siemens.com>
wrote:

> Looks like you daylight time is broken on Arch Linux and Ubuntu 20.04.
>
> -1 is error by mktime.
>
>
>
> Why do you think it is related here?
>
>
>
> Fix you daylight time setting in your system and open a bug report in the
> relevant packages/systems.
>
>
>
> Erez
>
>
>
>
>
> *From:* Lars Munch <l...@segv.dk>
> *Sent:* Tuesday, 20 April 2021 22:24
> *To:* Michael Galassi <mich...@galassi.us>
> *Cc:* linuxptp-devel@lists.sourceforge.net
> *Subject:* Re: [Linuxptp-devel] [PATCH] Fix uninitialized variable in
> nmea_scan_rmc
>
>
>
> Sorry for the noise. In my previous example I had by accident pasted a
> huge number into the example. New example:
>
>
>
> #include <stdio.h>
> #include <time.h>
> #include <stdlib.h>
>
> int main()
> {
>     struct tm t;
>     time_t now = time((void*)0);
>     localtime_r(&now, &t);
>     setenv("TZ", "UTC", 1);
>     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));
> }
>
>
>
> Gives:
>
> -1
> 1618956512
> 1618956512
>
>
>
> This is on my up-to-date Arch Linux and Ubuntu 20.04.
>
> On my Ubuntu 18.04 it's fine.
>
>
>
>
>
> On Tue, Apr 20, 2021 at 5:55 PM Lars Munch <l...@segv.dk> wrote:
>
> Ok, so mktime is forced to return in time UTC time scale earlier in the
> code:
>
>
>
> #include <stdio.h>
> #include <time.h>
> #include <stdlib.h>
>
> int main()
> {
>     struct tm t;
>     time_t now = time((void*)0);
>     localtime_r(&now, &t);
>     setenv("TZ", "UTC", 1);
>     t.tm_isdst = 4000000001;
>     printf("%ld\n", mktime(&t));
>     t.tm_isdst = 0;
>     printf("%ld\n", mktime(&t));
>     t.tm_isdst = -1;
>     printf("%ld\n", mktime(&t));
> }
>
>
>
> 1618941220
> 1618941220
> 1618941220
>
>
>
> So my problem might come from the fact that I do not have any timezone
> database on my system.
>
>
>
>
>
>
>
>
>
> On Tue, Apr 20, 2021 at 5:30 PM Lars Munch <l...@segv.dk> wrote:
>
> Indeed, any positive random number in tm.tm_isdst will set DST in effect
> it seems.
>
>
>
> On my stripped down ARM system with no timezone information, it will
> simply return -1.
>
>
>
> On Tue, Apr 20, 2021 at 4:26 PM Michael Galassi <mich...@galassi.us>
> wrote:
>
> 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
> <https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.sourceforge.net%2Flists%2Flistinfo%2Flinuxptp-devel&data=04%7C01%7Cerez.geva.ext%40siemens.com%7Cde9347c617d04ae9efce08d9043a60db%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637545471634930017%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=TZg3VXyc2Y0CUpCUOWt3bY5%2Fr8l5VdbXmfErnxXz5EA%3D&reserved=0>
>
>
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to