HomeFreeBSD

libc: Import OpenBSD's inet_net_{ntop,pton}

Description

libc: Import OpenBSD's inet_net_{ntop,pton}

Our versions of these functions (originally taken from BIND) simply
don't work correctly for AF_INET6. These were removed from BIND itself
quite a while ago, but OpenBSD has made several fixes in the mean time,
so import their code.

Add tests for both functions.

PR: 289198
Reported by: Nico Sonack <nsonack@herrhotzenplotz.de>
MFC after: 1 week
Reviewed by: des
Obtained from: OpenBSD (lib/libc/net)
Sponsored by: https://www.patreon.com/bsdivy
Differential Revision: https://reviews.freebsd.org/D52629

(cherry picked from commit 8f4a0d2f7b96099001dbc51e06114df1a0e6d291)

inet_net_test: Compare pointers against nullptr

GCC does not like passing NULL (__null) to std::ostringstream::operator<<
inside of ATF_REQUIRE_EQ:

lib/libc/tests/net/inet_net_test.cc: In member function 'virtual void {anonymous}::atfu_tc_inet_net_ntop_invalid::body() const':
lib/libc/tests/net/inet_net_test.cc:306:9: error: passing NULL to non-pointer argument 1 of 'std::1::basic_ostream<_CharT, _Traits>& std::1::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char; _Traits = std::__1::char_traits<char>]' [-Werror=conversion-null]

306 |         ATF_REQUIRE_EQ(ret, NULL);
    |         ^~~~~~~~~~~~~~

In file included from /usr/obj/.../amd64.amd64/tmp/usr/include/c++/v1/sstream:317,

from /usr/obj/.../amd64.amd64/tmp/usr/include/atf-c++/macros.hpp:29,
from /usr/obj/.../amd64.amd64/tmp/usr/include/atf-c++.hpp:29,
from lib/libc/tests/net/inet_net_test.cc:33:

/usr/obj/.../amd64.amd64/tmp/usr/include/c++/v1/__ostream/basic_ostream.h:338:81: note: declared here

338 | basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(long __n) {
    |                                                                            ~~~~~^~~

...

Fixes: 8f4a0d2f7b96 ("libc: Import OpenBSD's inet_net_{ntop,pton}")
(cherry picked from commit aa358ce3ca8e1fcfb305025fd00beb2a119c7c77)

inet_net_test: Use int to hold expected return values from inet_net_pton

GCC warns about the sign mismatch in comparisons:

lib/libc/tests/net/inet_net_test.cc: In member function 'virtual void {anonymous}::atfu_tc_inet_net_inet4::body() const':
lib/libc/tests/net/inet_net_test.cc:86:17: error: comparison of integer expressions of different signedness: 'int' and 'const unsigned int' [-Werror=sign-compare]

86 |                 ATF_REQUIRE_EQ(bits, addr.bits);
   |                 ^~~~~~~~~~~~~~

lib/libc/tests/net/inet_net_test.cc: In member function 'virtual void {anonymous}::atfu_tc_inet_net_inet6::body() const':
lib/libc/tests/net/inet_net_test.cc:205:17: error: comparison of integer expressions of different signedness: 'int' and 'const unsigned int' [-Werror=sign-compare]

205 |                 ATF_REQUIRE_EQ(bits, addr.bits);
    |                 ^~~~~~~~~~~~~~

Fixes: 8f4a0d2f7b96 ("libc: Import OpenBSD's inet_net_{ntop,pton}")
(cherry picked from commit e1aeb58cbbc3839db93ec38ce491b7b9383d5649)
(cherry picked from commit b4871be3490de56975777079c1767d1fd346ac7a)

Details

Provenance
ivyAuthored on Oct 25 2025, 4:41 AM
Reviewer
des
Differential Revision
D52629: libc: Import OpenBSD's inet_net_{ntop,pton}
Parents
rG2564a21f9774: libc: Add "Z" as TZ designator for strptime.
Branches
Unknown
Tags
Unknown