On Tue, Nov 09, 2021 at 08:05:10PM +0100, Claudio Jeker wrote:
> On Tue, Nov 09, 2021 at 07:44:41PM +0100, Claudio Jeker wrote:
> > ip_addr_print() can be simplified. ip4_addr2str() and ip6_addr2str() are
> > the same apart from the different AF argument to inet_ntop(). Just collaps
> > all into ip_addr_print().
> 
> This version is using a switch statement and fails hard for unknown AFIs.
> Suggested by Theo.

OK kn, one thing.

> @@ -277,11 +242,25 @@ void
>  ip_addr_print(const struct ip_addr *addr,
>      enum afi afi, char *buf, size_t bufsz)
>  {
> +     char ipbuf[44];

Why not INET6_ADDRSTRLEN?

> +     int ret, af;
> +
> +     switch (afi) {
> +     case AFI_IPV4:
> +             af = AF_INET;
> +             break;
> +     case AFI_IPV6:
> +             af = AF_INET6;
> +             break;
> +     default:
> +             errx(1, "unsupported address family identifier");
> +     }
>  
> -     if (afi == AFI_IPV4)
> -             ip4_addr2str(addr, buf, bufsz);
> -     else
> -             ip6_addr2str(addr, buf, bufsz);
> +     if (inet_ntop(af, addr->addr, ipbuf, sizeof(ipbuf)) == NULL)
> +             err(1, "inet_ntop");
> +     ret = snprintf(buf, bufsz, "%s/%hhu", ipbuf, addr->prefixlen);
> +     if (ret < 0 || (size_t)ret >= bufsz)
> +             err(1, "malformed IP address");
>  }
>  
>  /*
> 

Reply via email to