From: Eric Lammerts Date: Thu, 13 Apr 2006 15:15:26 +0000 (-0400) Subject: Fix bogus "system time" report for 64 bit systems X-Git-Tag: mandriva-1.22~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4771cbe8b092262f7e59def97e2c691211dad675;p=thirdparty%2Fchrony.git Fix bogus "system time" report for 64 bit systems 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. --- diff --git a/client.c b/client.c index a1d18d75..bcc7eb43 100644 --- 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),