diff -up ntp-4.2.6p1/ntpstat-0.2/ntpstat.c.maxerror ntp-4.2.6p1/ntpstat-0.2/ntpstat.c --- ntp-4.2.6p1/ntpstat-0.2/ntpstat.c.maxerror 2010-05-03 11:37:49.000000000 +0200 +++ ntp-4.2.6p1/ntpstat-0.2/ntpstat.c 2010-05-03 12:20:08.000000000 +0200 @@ -89,7 +89,9 @@ int main (void) { "modem"}; /* 9 */ char *newstr; char *dispstr; + char *delaystr; const char DISP[] = "rootdisp="; + const char DELAY[] = "rootdelay="; const char STRATUM[] = "stratum="; const char POLL[] = "tc="; const char REFID[] = "refid="; @@ -235,16 +237,19 @@ int main (void) { /* Set the position of the start of the string to "rootdispersion=" part of the string. */ strncpy(buff, ntpmsg.payload, sizeof(buff)); - if ((newstr = strstr (buff, DISP))) { - newstr += sizeof(DISP) - 1; - dispstr = strtok(newstr,"."); + if ((dispstr = strstr (buff, DISP)) && (delaystr = strstr (buff, DELAY))) { + dispstr += sizeof(DISP) - 1; + dispstr = strtok(dispstr,","); + delaystr += sizeof(DELAY) - 1; + delaystr = strtok(delaystr,","); /* Check the resultant string is of a reasonable length */ - if ((strlen (dispstr) == 0) || (strlen (dispstr) > 4)) { + if ((strlen (dispstr) == 0) || (strlen (dispstr) > 10) || + (strlen (delaystr) == 0) || (strlen (delaystr) > 10)) { printf ("accuracy unreadable\n"); } else { - printf(" time correct to within %s ms\n",dispstr); + printf(" time correct to within %.0f ms\n", atof(dispstr) + atof(delaystr) / 2.0); } } else { rc=1;