From e57abae1383d855d00fa467a1e5c9f67697f7abb Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Mon, 15 Dec 2014 17:59:42 +0100 Subject: [PATCH] cmdparse: add function to convert error status to string This is used to avoid duplication of error printing in chronyd and chronyc. --- client.c | 51 ++++------------------------------------- cmdparse.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ cmdparse.h | 3 +++ conf.c | 61 +++++++------------------------------------------ 4 files changed, 81 insertions(+), 100 deletions(-) diff --git a/client.c b/client.c index 2de99c0..847ea7b 100644 --- a/client.c +++ b/client.c @@ -930,6 +930,7 @@ process_cmd_add_server_or_peer(CMD_Request *msg, char *line) CPS_NTP_Source data; CPS_Status status; IPAddr ip_addr; + char str[64]; int result = 0; status = CPS_ParseNTPSourceAdd(line, &data); @@ -992,53 +993,9 @@ process_cmd_add_server_or_peer(CMD_Request *msg, char *line) result = 1; break; - case CPS_BadOption: - fprintf(stderr, "Unrecognized subcommand\n"); - break; - case CPS_BadHost: - fprintf(stderr, "Invalid host/IP address\n"); - break; - case CPS_BadPort: - fprintf(stderr, "Unreadable port number\n"); - break; - case CPS_BadMinpoll: - fprintf(stderr, "Unreadable minpoll value\n"); - break; - case CPS_BadMaxpoll: - fprintf(stderr, "Unreadable maxpoll value\n"); - break; - case CPS_BadPresend: - fprintf(stderr, "Unreadable presend value\n"); - break; - case CPS_BadMaxdelaydevratio: - fprintf(stderr, "Unreadable max delay dev ratio value\n"); - break; - case CPS_BadMaxdelayratio: - fprintf(stderr, "Unreadable max delay ratio value\n"); - break; - case CPS_BadMaxdelay: - fprintf(stderr, "Unreadable max delay value\n"); - break; - case CPS_BadKey: - fprintf(stderr, "Unreadable key value\n"); - break; - case CPS_BadMinstratum: - fprintf(stderr, "Unreadable minstratum value\n"); - break; - case CPS_BadPolltarget: - fprintf(stderr, "Unreadable polltarget value\n"); - break; - case CPS_BadVersion: - fprintf(stderr, "Unreadable version value\n"); - break; - case CPS_BadMaxsources: - fprintf(stderr, "Unreadable maxsources value\n"); - break; - case CPS_BadMinsamples: - fprintf(stderr, "Unreadable minsamples value\n"); - break; - case CPS_BadMaxsamples: - fprintf(stderr, "Unreadable maxsamples value\n"); + default: + CPS_StatusToString(status, str, sizeof (str)); + fprintf(stderr, "%s\n", str); break; } diff --git a/cmdparse.c b/cmdparse.c index 0a54772..6d2f96b 100644 --- a/cmdparse.c +++ b/cmdparse.c @@ -217,6 +217,72 @@ CPS_ParseNTPSourceAdd(char *line, CPS_NTP_Source *src) /* ================================================== */ +void +CPS_StatusToString(CPS_Status status, char *dest, int len) +{ + const char *s = NULL; + + if (len > 0) + dest[0] = '\0'; + + switch (status) { + case CPS_Success: + return; + case CPS_BadOption: + s = "server/peer/pool option"; + break; + case CPS_BadHost: + s = "address"; + break; + case CPS_BadPort: + s = "port"; + break; + case CPS_BadMinpoll: + s = "minpoll"; + break; + case CPS_BadMaxpoll: + s = "maxpoll"; + break; + case CPS_BadPresend: + s = "presend"; + break; + case CPS_BadMaxdelaydevratio: + s = "maxdelaydevratio"; + break; + case CPS_BadMaxdelayratio: + s = "maxdelayratio"; + break; + case CPS_BadMaxdelay: + s = "maxdelay"; + break; + case CPS_BadKey: + s = "key"; + break; + case CPS_BadMinstratum: + s = "minstratum"; + break; + case CPS_BadPolltarget: + s = "polltarget"; + break; + case CPS_BadVersion: + s = "version"; + break; + case CPS_BadMaxsources: + s = "maxsources"; + break; + case CPS_BadMinsamples: + s = "minsamples"; + break; + case CPS_BadMaxsamples: + s = "maxsamples"; + break; + } + + snprintf(dest, len, "Invalid %s", s); +} + +/* ================================================== */ + void CPS_NormalizeLine(char *line) { diff --git a/cmdparse.h b/cmdparse.h index 75cce91..3d18ade 100644 --- a/cmdparse.h +++ b/cmdparse.h @@ -59,6 +59,9 @@ typedef struct { /* Parse a command to add an NTP server or peer */ extern CPS_Status CPS_ParseNTPSourceAdd(char *line, CPS_NTP_Source *src); +/* Get a string describing error status */ +extern void CPS_StatusToString(CPS_Status status, char *dest, int len); + /* Remove extra white-space and comments */ extern void CPS_NormalizeLine(char *line); diff --git a/conf.c b/conf.c index d6f1764..605689d 100644 --- a/conf.c +++ b/conf.c @@ -583,65 +583,20 @@ parse_source(char *line, NTP_Source_Type type, int pool) { CPS_Status status; NTP_Source source; + char str[64]; source.type = type; source.pool = pool; status = CPS_ParseNTPSourceAdd(line, &source.params); - switch (status) { - case CPS_Success: - source.params.name = Strdup(source.params.name); - ARR_AppendElement(ntp_sources, &source); - break; - case CPS_BadOption: - other_parse_error("Invalid server/peer parameter"); - break; - case CPS_BadHost: - other_parse_error("Invalid host/IP address"); - break; - case CPS_BadPort: - other_parse_error("Unreadable port"); - break; - case CPS_BadMinpoll: - other_parse_error("Unreadable minpoll"); - break; - case CPS_BadMaxpoll: - other_parse_error("Unreadable maxpoll"); - break; - case CPS_BadPresend: - other_parse_error("Unreadable presend"); - break; - case CPS_BadMaxdelaydevratio: - other_parse_error("Unreadable maxdelaydevratio"); - break; - case CPS_BadMaxdelayratio: - other_parse_error("Unreadable maxdelayratio"); - break; - case CPS_BadMaxdelay: - other_parse_error("Unreadable maxdelay"); - break; - case CPS_BadKey: - other_parse_error("Unreadable key"); - break; - case CPS_BadMinstratum: - other_parse_error("Unreadable minstratum"); - break; - case CPS_BadPolltarget: - other_parse_error("Unreadable polltarget"); - break; - case CPS_BadVersion: - other_parse_error("Unreadable version"); - break; - case CPS_BadMaxsources: - other_parse_error("Unreadable maxsources"); - break; - case CPS_BadMinsamples: - other_parse_error("Unreadable minsamples"); - break; - case CPS_BadMaxsamples: - other_parse_error("Unreadable maxsamples"); - break; + if (status != CPS_Success) { + CPS_StatusToString(status, str, sizeof (str)); + other_parse_error(str); + return; } + + source.params.name = Strdup(source.params.name); + ARR_AppendElement(ntp_sources, &source); } /* ================================================== */