From cdb0b6124f4cc14ed87624d45d3155cc7f3d7a59 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Fri, 25 Nov 2016 10:15:58 +0100 Subject: [PATCH] client: add new format specifiers to print_report() --- client.c | 93 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 23 deletions(-) diff --git a/client.c b/client.c index e686f51..26c61ea 100644 --- a/client.c +++ b/client.c @@ -1767,6 +1767,10 @@ print_report(const char *format, ...) } switch (spec) { + case 'B': /* boolean */ + integer = va_arg(ap, int); + printf("%s", integer ? "Yes" : "No"); + break; case 'C': /* clientlog interval */ integer = va_arg(ap, int); print_clientlog_interval(integer); @@ -1782,6 +1786,63 @@ print_report(const char *format, ...) long_uinteger = va_arg(ap, unsigned long); print_seconds(long_uinteger); break; + case 'L': /* leap status */ + integer = va_arg(ap, int); + switch (integer) { + case LEAP_Normal: + string = "Normal"; + break; + case LEAP_InsertSecond: + string = "Insert second"; + break; + case LEAP_DeleteSecond: + string = "Delete second"; + break; + case LEAP_Unsynchronised: + string = "Not synchronised"; + break; + default: + string = "Invalid"; + break; + } + printf("%s", string); + break; + case 'M': /* NTP mode */ + integer = va_arg(ap, int); + switch (integer) { + case MODE_ACTIVE: + string = "Symmetric active"; + break; + case MODE_PASSIVE: + string = "Symmetric passive"; + break; + case MODE_SERVER: + string = "Server"; + break; + default: + string = "Invalid"; + break; + } + printf("%s", string); + break; + case 'N': /* Timestamp source */ + integer = va_arg(ap, int); + switch (integer) { + case 'D': + string = "Daemon"; + break; + case 'K': + string = "Kernel"; + break; + case 'H': + string = "Hardware"; + break; + default: + string = "Invalid"; + break; + } + printf("%s", string); + break; case 'P': /* frequency in ppm */ dbl = va_arg(ap, double); if (sign) @@ -1816,6 +1877,11 @@ print_report(const char *format, ...) ts = va_arg(ap, struct timespec *); printf("%s", UTI_TimespecToString(ts)); break; + case 'b': /* unsigned int in binary */ + uinteger = va_arg(ap, unsigned int); + for (i = prec - 1; i >= 0; i--) + printf("%c", uinteger & 1U << i ? '1' : '0'); + break; /* Classic printf specifiers */ case 'c': /* character */ @@ -2082,7 +2148,6 @@ process_cmd_tracking(char *line) uint32_t ref_id; char name[50]; struct timespec ref_time; - const char *leap_status; request.command = htons(REQ_TRACKING); if (!request_reply(&request, &reply, RPY_TRACKING, 0)) @@ -2094,24 +2159,6 @@ process_cmd_tracking(char *line) format_name(name, sizeof (name), sizeof (name), ip_addr.family == IPADDR_UNSPEC, ref_id, &ip_addr); - switch (ntohs(reply.data.tracking.leap_status)) { - case LEAP_Normal: - leap_status = "Normal"; - break; - case LEAP_InsertSecond: - leap_status = "Insert second"; - break; - case LEAP_DeleteSecond: - leap_status = "Delete second"; - break; - case LEAP_Unsynchronised: - leap_status = "Not synchronised"; - break; - default: - leap_status = "Unknown"; - break; - } - UTI_TimespecNetworkToHost(&reply.data.tracking.ref_time, &ref_time); print_report("Reference ID : %R (%s)\n" @@ -2126,7 +2173,7 @@ process_cmd_tracking(char *line) "Root delay : %.6f seconds\n" "Root dispersion : %.6f seconds\n" "Update interval : %.1f seconds\n" - "Leap status : %s\n", + "Leap status : %L\n", (unsigned long)ref_id, name, ntohs(reply.data.tracking.stratum), &ref_time, @@ -2139,7 +2186,7 @@ process_cmd_tracking(char *line) UTI_FloatNetworkToHost(reply.data.tracking.root_delay), UTI_FloatNetworkToHost(reply.data.tracking.root_dispersion), UTI_FloatNetworkToHost(reply.data.tracking.last_update_interval), - leap_status, REPORT_END); + ntohs(reply.data.tracking.leap_status), REPORT_END); return 1; } @@ -2186,13 +2233,13 @@ process_cmd_smoothing(char *line) flags = ntohl(reply.data.smoothing.flags); - print_report("Active : %s %s\n" + print_report("Active : %B %s\n" "Offset : %+.9f seconds\n" "Frequency : %+.6f ppm\n" "Wander : %+.6f ppm per second\n" "Last update : %.1f seconds ago\n" "Remaining time : %.1f seconds\n", - flags & RPY_SMT_FLAG_ACTIVE ? "Yes" : "No", + !!(flags & RPY_SMT_FLAG_ACTIVE), flags & RPY_SMT_FLAG_LEAPONLY ? "(leap second only)" : "", UTI_FloatNetworkToHost(reply.data.smoothing.offset), UTI_FloatNetworkToHost(reply.data.smoothing.freq_ppm),