On Sun, Dec 20, 2020 at 01:39:57PM +0100, Otto Moerbeek wrote:
> Hi,
> 
> scope is there, just not shown. While there, use proper constants for
> two sizes.
> 
>       -Otto
> 
> 
> Index: ktrstruct.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/kdump/ktrstruct.c,v
> retrieving revision 1.28
> diff -u -p -r1.28 ktrstruct.c
> --- ktrstruct.c       17 Nov 2018 20:46:12 -0000      1.28
> +++ ktrstruct.c       20 Dec 2020 12:34:34 -0000
> @@ -90,7 +90,7 @@ ktrsockaddr(struct sockaddr *sa)
>       switch(sa->sa_family) {
>       case AF_INET: {
>               struct sockaddr_in      *sa_in;
> -             char addr[64];
> +             char addr[INET_ADDRSTRLEN];
>  
>               sa_in = (struct sockaddr_in *)sa;
>               check_sockaddr_len(in);
> @@ -100,12 +100,15 @@ ktrsockaddr(struct sockaddr *sa)
>       }
>       case AF_INET6: {
>               struct sockaddr_in6     *sa_in6;
> -             char addr[64];
> +             char addr[INET6_ADDRSTRLEN], scope[12] = { 0 };
>  
>               sa_in6 = (struct sockaddr_in6 *)sa;
>               check_sockaddr_len(in6);
>               inet_ntop(AF_INET6, &sa_in6->sin6_addr, addr, sizeof addr);
> -             printf("[%s]:%u", addr, htons(sa_in6->sin6_port));
> +             if (sa_in6->sin6_scope_id)
> +                     snprintf(scope, sizeof(scope), "%%%u",
> +                         sa_in6->sin6_scope_id);

Would it make sense to use if_indextoname() here to translate the string
into an interface name? The snprintf would still be needed for the case
where NULL is returned by if_indextoname().

> +             printf("[%s%s]:%u", addr, scope, htons(sa_in6->sin6_port));
>               break;
>       }
>       case AF_UNIX: {
> 

-- 
:wq Claudio

Reply via email to