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 >>> >>
_______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel