cmdparse: add function to convert error status to string

This is used to avoid duplication of error printing in chronyd and
chronyc.
This commit is contained in:
Miroslav Lichvar 2014-12-15 17:59:42 +01:00
parent fc73accfe5
commit e57abae138
4 changed files with 81 additions and 100 deletions

View file

@ -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;
}

View file

@ -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)
{

View file

@ -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);

59
conf.c
View file

@ -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:
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);
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;
}
}
/* ================================================== */