]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
Fix bogus "system time" report for 64 bit systems
authorEric Lammerts <eric@lammerts.org>
Thu, 13 Apr 2006 15:15:26 +0000 (11:15 -0400)
committerRichard P. Curnow <rc@rc0.org.uk>
Fri, 14 Apr 2006 23:18:28 +0000 (00:18 +0100)
Eric Lammerts writes:
This is known as Debian bug #195620, which is almost three years old!

The problem is that a uint32_t which comes out of ntohl() (but
actually represents a signed value) is directly promoted to long.
Therefore no sign extension takes place.

Patch below solves the problem. There are other places where this
needs to be fixed, but I'll leave that to a less lazy person.

client.c

index a1d18d75f45e654052093bacb804333e6acc23ad..bcc7eb43cfa19644637a434ea3eaa20c08b698ad 100644 (file)
--- a/client.c
+++ b/client.c
@@ -1652,7 +1652,7 @@ process_cmd_tracking(char *line)
     ref_time.tv_usec = ntohl(reply.data.tracking.ref_time_us);
     ref_time_tm = *gmtime((time_t *)&ref_time.tv_sec);
     printf("Ref time (UTC)  : %s", asctime(&ref_time_tm));
-    correction_tv.tv_sec = ntohl(reply.data.tracking.current_correction_s);
+    correction_tv.tv_sec = (int32_t)ntohl(reply.data.tracking.current_correction_s);
     correction_tv.tv_usec = ntohl(reply.data.tracking.current_correction_us);
     correction = (double) correction_tv.tv_sec + 1.0e-6 * correction_tv.tv_usec;
     printf("System time     : %.6f seconds %s of NTP time\n", fabs(correction),