Replace the very same error message strlcpy() uses earlier.  This makes
it easier to distinguish and does not hide different errors behind the
same generic one.

For example, it turns

        # route -qn add -inet6 fec0::% -prefixlen 10 ::1 -reject 
        route: fec0::%: bad value

into

        # ./obj/route -qn add -inet6 fec0::% -prefixlen 10 ::1 -reject 
        route: fec0::%: no address associated with name

Feedback? OK?

Index: route.c
===================================================================
RCS file: /cvs/src/sbin/route/route.c,v
retrieving revision 1.246
diff -u -p -r1.246 route.c
--- route.c     22 Nov 2019 15:28:05 -0000      1.246
+++ route.c     15 Jan 2020 00:20:29 -0000
@@ -859,6 +859,7 @@ getaddr(int which, int af, char *s, stru
                   sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:255:255:255:255/128")
                ];
                char           *sep;
+               int             error;
 
                if (strlcpy(buf, s, sizeof buf) >= sizeof buf) {
                        errx(1, "%s: bad value", s);
@@ -871,10 +872,12 @@ getaddr(int which, int af, char *s, stru
                hints.ai_family = afamily;      /*AF_INET6*/
                hints.ai_flags = AI_NUMERICHOST;
                hints.ai_socktype = SOCK_DGRAM;         /*dummy*/
-               if (getaddrinfo(buf, "0", &hints, &res) != 0) {
+               error = getaddrinfo(buf, "0", &hints, &res);
+               if (error) {
                        hints.ai_flags = 0;
-                       if (getaddrinfo(buf, "0", &hints, &res) != 0)
-                               errx(1, "%s: bad value", s);
+                       error = getaddrinfo(buf, "0", &hints, &res);
+                       if (error)
+                               errx(1, "%s: %s", s, gai_strerror(error));
                }
                if (res->ai_next)
                        errx(1, "%s: resolved to multiple values", s);

Reply via email to