From 43835a137db2c11db762c613be4c1be506f8cfb8 Mon Sep 17 00:00:00 2001 From: ed Date: Thu, 28 Jul 2016 10:05:41 +0000 Subject: [PATCH] Add NI_NUMERICSCOPE. POSIX also declares NI_NUMERICSCOPE, which makes getnameinfo() return a numerical scope identifier. The interesting thing is that support for this is already present in code, but #ifdef disabled. Expose this functionality by placing a definition for it in . While there, remove references to NI_WITHSCOPEID, as that got removed 11 years ago. --- include/netdb.h | 4 +--- lib/libc/net/getnameinfo.3 | 6 ++++-- lib/libc/net/getnameinfo.c | 2 -- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/include/netdb.h b/include/netdb.h index 0d9cb4e6d872..2da7755decae 100644 --- a/include/netdb.h +++ b/include/netdb.h @@ -214,9 +214,7 @@ struct addrinfo { #define NI_NAMEREQD 0x00000004 #define NI_NUMERICSERV 0x00000008 #define NI_DGRAM 0x00000010 -#if 0 /* obsolete */ -#define NI_WITHSCOPEID 0x00000020 -#endif +#define NI_NUMERICSCOPE 0x00000020 /* * Scope delimit character diff --git a/lib/libc/net/getnameinfo.3 b/lib/libc/net/getnameinfo.3 index ff227fd2fc03..9e49eaccf3f1 100644 --- a/lib/libc/net/getnameinfo.3 +++ b/lib/libc/net/getnameinfo.3 @@ -18,7 +18,7 @@ .\" .\" $FreeBSD$ .\" -.Dd September 20, 2015 +.Dd July 28, 2016 .Dt GETNAMEINFO 3 .Os .Sh NAME @@ -111,7 +111,7 @@ The argument is formed by .Tn OR Ns 'ing the following values: -.Bl -tag -width "NI_NUMERICHOSTXX" +.Bl -tag -width "NI_NUMERICSCOPEXX" .It Dv NI_NOFQDN A fully qualified domain name is not required for local hosts. The local part of the fully qualified domain name is returned instead. @@ -127,6 +127,8 @@ If the host name is not found and the flag is not set, the address is returned in numeric form. .It NI_NUMERICSERV The service name is returned as a digit string representing the port number. +.It NI_NUMERICSCOPE +The scope identifier is returned as a digit string. .It NI_DGRAM Specifies that the service being looked up is a datagram service, and causes diff --git a/lib/libc/net/getnameinfo.c b/lib/libc/net/getnameinfo.c index 4b7aecbc6f02..54f232449fc2 100644 --- a/lib/libc/net/getnameinfo.c +++ b/lib/libc/net/getnameinfo.c @@ -378,7 +378,6 @@ ip6_sa2str(const struct sockaddr_in6 *sa6, char *buf, size_t bufsiz, int flags) ifindex = (unsigned int)sa6->sin6_scope_id; a6 = &sa6->sin6_addr; -#ifdef NI_NUMERICSCOPE if ((flags & NI_NUMERICSCOPE) != 0) { n = snprintf(buf, bufsiz, "%u", sa6->sin6_scope_id); if (n < 0 || n >= bufsiz) @@ -386,7 +385,6 @@ ip6_sa2str(const struct sockaddr_in6 *sa6, char *buf, size_t bufsiz, int flags) else return n; } -#endif /* if_indextoname() does not take buffer size. not a good api... */ if ((IN6_IS_ADDR_LINKLOCAL(a6) || IN6_IS_ADDR_MC_LINKLOCAL(a6) ||