Avoid large times in chronyc sources / sourcestats overflowing lines
Main trouble was double values too large to be represented as ints being converted to -INT_MAX and then passing the < 9999 cut.
This commit is contained in:
parent
2ea87490f4
commit
f9103531c4
1 changed files with 52 additions and 29 deletions
81
client.c
81
client.c
|
@ -1483,21 +1483,26 @@ print_seconds(unsigned long s)
|
||||||
static void
|
static void
|
||||||
print_nanoseconds(double s)
|
print_nanoseconds(double s)
|
||||||
{
|
{
|
||||||
unsigned long ms, ns;
|
s = fabs(s);
|
||||||
|
|
||||||
ns = s * 1e9 + 0.5;
|
if (s < 9999.5e-9) {
|
||||||
ms = s * 1e3 + 0.5;
|
printf("%4.0fns", s * 1e9);
|
||||||
|
} else if (s < 9999.5e-6) {
|
||||||
if (ns <= 9999) {
|
printf("%4.0fus", s * 1e6);
|
||||||
printf("%4ldns", ns);
|
} else if (s < 9999.5e-3) {
|
||||||
} else if (ns <= 9999499) {
|
printf("%4.0fms", s * 1e3);
|
||||||
printf("%4ldus", (ns + 500) / 1000);
|
} else if (s < 999.5) {
|
||||||
} else if (ms <= 9999) {
|
printf("%5.1fs", s);
|
||||||
printf("%4ldms", ms);
|
} else if (s < 99999.5) {
|
||||||
} else if (ms <= 999949) {
|
printf("%5.0fs", s);
|
||||||
printf("%3ld.%01lds", (ms + 50) / 1000, ((ms + 50) / 100) % 10);
|
} else if (s < 99999.5 * 60) {
|
||||||
|
printf("%5.0fm", s / 60);
|
||||||
|
} else if (s < 99999.5 * 3600) {
|
||||||
|
printf("%5.0fh", s / 3600);
|
||||||
|
} else if (s < 99999.5 * 3600 * 24) {
|
||||||
|
printf("%5.0fd", s / (3600 * 24));
|
||||||
} else {
|
} else {
|
||||||
printf("%5lds", (ms + 500) / 1000);
|
printf("%5.0fy", s / (3600 * 24 * 365));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1506,26 +1511,40 @@ print_nanoseconds(double s)
|
||||||
static void
|
static void
|
||||||
print_signed_nanoseconds(double s)
|
print_signed_nanoseconds(double s)
|
||||||
{
|
{
|
||||||
long ms, ns, sign;
|
double x;
|
||||||
|
|
||||||
if (s >= 0.0) {
|
x = fabs(s);
|
||||||
ns = s * 1e9 + 0.5;
|
|
||||||
ms = s * 1e3 + 0.5;
|
if (x < 9999.5e-9) {
|
||||||
sign = 1;
|
printf("%+5.0fns", s * 1e9);
|
||||||
|
} else if (x < 9999.5e-6) {
|
||||||
|
printf("%+5.0fus", s * 1e6);
|
||||||
|
} else if (x < 9999.5e-3) {
|
||||||
|
printf("%+5.0fms", s * 1e3);
|
||||||
|
} else if (x < 999.5) {
|
||||||
|
printf("%+6.1fs", s);
|
||||||
|
} else if (x < 99999.5) {
|
||||||
|
printf("%+6.0fs", s);
|
||||||
|
} else if (x < 99999.5 * 60) {
|
||||||
|
printf("%+6.0fm", s / 60);
|
||||||
|
} else if (x < 99999.5 * 3600) {
|
||||||
|
printf("%+6.0fh", s / 3600);
|
||||||
|
} else if (x < 99999.5 * 3600 * 24) {
|
||||||
|
printf("%+6.0fd", s / (3600 * 24));
|
||||||
} else {
|
} else {
|
||||||
ns = -s * 1e9 + 0.5;
|
printf("%+6.0fy", s / (3600 * 24 * 365));
|
||||||
ms = -s * 1e3 + 0.5;
|
|
||||||
sign = -1;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ns <= 9999) {
|
/* ================================================== */
|
||||||
printf("%+5ldns", ns * sign);
|
|
||||||
} else if (ns <= 9999499) {
|
static void
|
||||||
printf("%+5ldus", (ns + 500) / 1000 * sign);
|
print_freq_ppm(double f)
|
||||||
} else if (ms <= 9999) {
|
{
|
||||||
printf("%+5ldms", ms * sign);
|
if (fabs(f) < 99999.5) {
|
||||||
|
printf("%10.3f", f);
|
||||||
} else {
|
} else {
|
||||||
printf("%+6lds", (ms + 500) / 1000 * sign);
|
printf("%10.0f", f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1713,7 +1732,11 @@ process_cmd_sourcestats(char *line)
|
||||||
|
|
||||||
printf("%-25s %2lu %2lu ", hostname_buf, n_samples, n_runs);
|
printf("%-25s %2lu %2lu ", hostname_buf, n_samples, n_runs);
|
||||||
print_seconds(span_seconds);
|
print_seconds(span_seconds);
|
||||||
printf(" %10.3f %10.3f ", resid_freq_ppm, skew_ppm);
|
printf(" ");
|
||||||
|
print_freq_ppm(resid_freq_ppm);
|
||||||
|
printf(" ");
|
||||||
|
print_freq_ppm(skew_ppm);
|
||||||
|
printf(" ");
|
||||||
print_signed_nanoseconds(est_offset);
|
print_signed_nanoseconds(est_offset);
|
||||||
printf(" ");
|
printf(" ");
|
||||||
print_nanoseconds(sd);
|
print_nanoseconds(sd);
|
||||||
|
|
Loading…
Reference in a new issue