nmea: make sure date is valid
authorDaniel Golle <daniel@makrotopia.org>
Tue, 26 May 2020 13:29:07 +0000 (14:29 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Tue, 26 May 2020 13:29:07 +0000 (14:29 +0100)
GPS time without date was previously used to set system date:
Tue Oct 10 11:48:21 2000 user.info kernel: [  108.786639] ugps: system time differs from GPS time by more than 5 seconds. Using 2000-10-10T10:48:21 UTC as the new time
Tue Oct 10 11:49:27 2000 user.info kernel: [  174.794699] ugps: system time differs from GPS time by more than 5 seconds. Using 2020-05-26T10:49:27 UTC as the new time

Fix this by ignoring incomplete dates and wait for complete time
information before adjusting system date/time.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
nmea.c

diff --git a/nmea.c b/nmea.c
index 61c57ab883da6e47897306885c923e2b90a23878..8df77929f422dfe17d3625da8d8c6f622b899867 100644 (file)
--- a/nmea.c
+++ b/nmea.c
@@ -90,6 +90,10 @@ nmea_rmc_cb(void)
                &tm.tm_mday, &tm.tm_mon, &tm.tm_year) != 3) {
                ERROR("failed to parse date '%s'\n", nmea_params[9].str);
        }
+       else if (tm.tm_year == 0) {
+               DEBUG(4, "waiting for valid date\n");
+               return;
+       }
        else {
                tm.tm_year += 100; /* year starts with 1900 */
                tm.tm_mon -= 1; /* month starts with 0 */