]> git.ipfire.org Git - thirdparty/mtr.git/commitdiff
cleanup: use single logic to handle conditional options
authorSami Kerola <kerolasa@iki.fi>
Sat, 29 Oct 2016 13:19:16 +0000 (14:19 +0100)
committerSami Kerola <kerolasa@iki.fi>
Sat, 29 Oct 2016 13:19:16 +0000 (14:19 +0100)
Options that exist depending on compile time configuration are made
conditional in usage() and getopt_long().  Removing not-supported options
from manual per compile time configuration would be nice, but making that to
work is a bit tricky.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
mtr.c

diff --git a/mtr.c b/mtr.c
index a42fe2ad5da34e16e6f497a7c576366fd4a0db7f..630e39819dd9894811e9b51c8e19a5f054c0c018 100644 (file)
--- a/mtr.c
+++ b/mtr.c
@@ -102,7 +102,9 @@ static void __attribute__((__noreturn__)) usage(FILE *out)
   fputs("\n", out);
   fputs(" -F, --filename FILE        read hostname(s) from a file\n", out);
   fputs(" -4                         use IPv4 only\n", out);
+#ifdef ENABLE_IPV6
   fputs(" -6                         use IPv6 only\n", out);
+#endif
   fputs(" -u, --udp                  use udp instead of icmp echo\n", out);
   fputs(" -T, --tcp                  use tcp instead of icmp echo\n", out);
   fputs(" -a, --address ADDRESS      bind the outgoing socket to ADDRESS\n", out);
@@ -118,7 +120,9 @@ static void __attribute__((__noreturn__)) usage(FILE *out)
   fputs(" -Q, --tos NUMBER           type of service field in IP header\n", out);
   fputs(" -e, --mpls                 display information from ICMP extensions\n", out);
   fputs(" -Z, --timeout SECONDS      seconds to keep the TCP socket open\n", out);
+#ifdef SO_MARK
   fputs(" -M, --mark MARK            mark each sent packet\n", out);
+#endif
   fputs(" -r, --report               output using report mode\n", out);
   fputs(" -w, --report-wide          output wide report\n", out);
   fputs(" -c, --report-cycles COUNT  set the number of pings sent\n", out);
@@ -321,7 +325,9 @@ static void parse_arg (struct mtr_ctl *ctl, names_t **names, int argc, char **ar
        { "max-unknown",    1, NULL, 'U' },
     { "udp",            0, NULL, 'u' }, /* UDP (default is ICMP) */
     { "tcp",            0, NULL, 'T' }, /* TCP (default is ICMP) */
+#ifdef HAS_SCTP
     { "sctp",           0, NULL, 'S' }, /* SCTP (default is ICMP) */
+#endif
     { "port",           1, NULL, 'P' }, /* target port number for TCP/SCTP/UDP */
     { "localport",      1, NULL, 'L' }, /* source port number for UDP */
     { "timeout",        1, NULL, 'Z' }, /* timeout for TCP sockets */
@@ -503,8 +509,8 @@ static void parse_arg (struct mtr_ctl *ctl, names_t **names, int argc, char **ar
       }
       ctl->mtrtype = IPPROTO_TCP;
       break;
-    case 'S':
 #ifdef HAS_SCTP
+    case 'S':
       if (ctl->mtrtype != IPPROTO_ICMP) {
         error(EXIT_FAILURE, 0, "-u , -T and -S are mutually exclusive");
       }
@@ -512,10 +518,8 @@ static void parse_arg (struct mtr_ctl *ctl, names_t **names, int argc, char **ar
         ctl->remoteport = 80;
       }
       ctl->mtrtype = IPPROTO_SCTP;
-#else
-      error(EXIT_FAILURE, 0, "No SCTP support found at compiletime");
-#endif
       break;
+#endif
     case 'b':
       ctl->show_ips = 1;
       break;
@@ -538,13 +542,10 @@ static void parse_arg (struct mtr_ctl *ctl, names_t **names, int argc, char **ar
     case '4':
       ctl->af = AF_INET;
       break;
-    case '6':
 #ifdef ENABLE_IPV6
+    case '6':
       ctl->af = AF_INET6;
       break;
-#else
-      error(EXIT_FAILURE, 0, "IPv6 not enabled");
-      break;
 #endif
 #ifdef HAVE_IPINFO
     case 'y':
@@ -556,20 +557,11 @@ static void parse_arg (struct mtr_ctl *ctl, names_t **names, int argc, char **ar
     case 'z':
       ctl->ipinfo_no = 0;
       break;
-#else
-    case 'y':
-    case 'z':
-      error(EXIT_FAILURE, 0, "IPINFO not enabled");
-      break;
 #endif
 #ifdef SO_MARK
     case 'M':
       ctl->mark = strtonum_or_err(optarg, "invalid argument", STRTO_U32INT);
       break;
-#else
-    case 'M':
-      error(EXIT_FAILURE, 0, "SO_MARK not enabled");
-      break;
 #endif
     default:
       usage(stderr);