From 919422d1dee7d35a236035f190f491a4a2113772 Mon Sep 17 00:00:00 2001
From: "R.E. Wolff" <R.E.Wolff@BitWizard.nl>
Date: Thu, 8 Aug 2019 10:47:44 +0200
Subject: [PATCH] fix warning on recent compilers.

---
 packet/probe.c      | 11 +++++++++++
 packet/probe.h      |  2 ++
 packet/probe_unix.c |  3 ++-
 ui/mtr.c            |  2 +-
 4 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/packet/probe.c b/packet/probe.c
index 0177e97..145c7a1 100644
--- a/packet/probe.c
+++ b/packet/probe.c
@@ -38,6 +38,8 @@
 #include "timeval.h"
 #include "sockaddr.h"
 
+char *probe_err;
+
 /*  Convert the destination address from text to sockaddr  */
 int decode_address_string(
     int ip_version,
@@ -98,18 +100,23 @@ int resolve_probe_addresses(
 {
     if (decode_address_string
         (param->ip_version, param->remote_address, dest_sockaddr)) {
+        probe_err = "decode address string remote";
         return -1;
     }
 
     if (param->local_address) {
         if (decode_address_string
             (param->ip_version, param->local_address, src_sockaddr)) {
+            probe_err = "decode address string local";
             return -1;
         }
     } else {
+        probe_err = "find source address";
         if (find_source_addr(src_sockaddr, dest_sockaddr)) {
+            //probe_err = "find source address";
             return -1;
         }
+        probe_err = "";
     }
     /* DGRAM ICMP id is taken from src_port not from ICMP header */
     if (param->protocol == IPPROTO_ICMP) {
@@ -327,12 +334,14 @@ int find_source_addr(
 
     sock = socket(destaddr->ss_family, SOCK_DGRAM, IPPROTO_UDP);
     if (sock == -1) {
+        probe_err = "open socket";
         return -1;
     }
 
     if (connect(sock, (struct sockaddr *) &dest_with_port, len) == 0) {
         if (getsockname(sock, (struct sockaddr *) srcaddr, &len)) {
             close(sock);
+            probe_err = "getsockname";
             return -1;
         }
     } else {
@@ -341,6 +350,7 @@ int find_source_addr(
          * a case when mtr is run against unreachable host (that can become
          * reachable) */
         if (errno != EHOSTUNREACH) {
+            probe_err = "not hostunreach";
             close(sock);
             return -1;
         }
@@ -354,6 +364,7 @@ int find_source_addr(
         }
 #else
         close(sock);
+        probe_err = "connect failed";
         return -1;
 #endif
     }
diff --git a/packet/probe.h b/packet/probe.h
index 53b8037..796eb71 100644
--- a/packet/probe.h
+++ b/packet/probe.h
@@ -207,4 +207,6 @@ int find_source_addr(
     struct sockaddr_storage *srcaddr,
     const struct sockaddr_storage *destaddr);
 
+extern char *probe_err;
+
 #endif
diff --git a/packet/probe_unix.c b/packet/probe_unix.c
index 363930f..4f49fd4 100644
--- a/packet/probe_unix.c
+++ b/packet/probe_unix.c
@@ -145,7 +145,8 @@ void check_length_order(
 
     if (resolve_probe_addresses(net_state, &param, &p0.remote_addr,
                 &p0.local_addr)) {
-        fprintf(stderr, "Error decoding localhost address\n");
+        fprintf(stderr, "Error decoding localhost address (%s/%s)\n", 
+                probe_err, strerror (errno));
         exit(EXIT_FAILURE);
     }
 
diff --git a/ui/mtr.c b/ui/mtr.c
index a3fef48..bfc89c3 100644
--- a/ui/mtr.c
+++ b/ui/mtr.c
@@ -299,7 +299,7 @@ static void init_fld_options(
 {
     int i;
 
-    memset(ctl->fld_index, -1, FLD_INDEX_SZ);
+    memset(ctl->fld_index, -1, FLD_INDEX_SZ*sizeof(ctl->fld_index[0]));
 
     for (i = 0; data_fields[i].key != 0; i++) {
         ctl->available_options[i] = data_fields[i].key;
