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<mailto: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<mailto: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<mailto: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<mailto: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<mailto: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