]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
cmdparse: add function to convert error status to string
authorMiroslav Lichvar <mlichvar@redhat.com>
Mon, 15 Dec 2014 16:59:42 +0000 (17:59 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Mon, 15 Dec 2014 17:21:51 +0000 (18:21 +0100)
This is used to avoid duplication of error printing in chronyd and
chronyc.

client.c
cmdparse.c
cmdparse.h
conf.c

index 2de99c011e3fb39dee8153ba248b48d76bfc2c10..847ea7b547aac88bcb62be560f7c31796d0d1ec6 100644 (file)
--- 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;
   }
 
index 0a547725d0c5d0379cccdfeb33d66ea3a382bc42..6d2f96babe403fc96e0e03dddda3ee69f769a3dd 100644 (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)
 {
index 75cce91a89924805fc2c70de8a0a8f0345a8a2bb..3d18adec6f3328b23680d7f9a783ed2d5a0e9794 100644 (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);
 
diff --git a/conf.c b/conf.c
index d6f1764592dc4d17aac3dec9d6839a371989ed74..605689d1ada6d4e3a864ca3f7179cd78b4ba6824 100644 (file)
--- 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);
 }
 
 /* ================================================== */