>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