From b920c73d37b45f4a8c5ff3f305ea80cc93845a78 Mon Sep 17 00:00:00 2001 From: Mattias Wallin Date: Fri, 10 Apr 2026 11:47:28 +0200 Subject: [PATCH 1/2] UNIX: Add network entry API --- libc-test/semver/unix.txt | 4 ++++ src/unix/mod.rs | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/libc-test/semver/unix.txt b/libc-test/semver/unix.txt index 052c24178dfcc..e723462cb8869 100644 --- a/libc-test/semver/unix.txt +++ b/libc-test/semver/unix.txt @@ -505,6 +505,7 @@ dlopen dlsym dup dup2 +endnetent execl execle execlp @@ -567,6 +568,7 @@ getgid getgroups gethostname getlogin +getnetent getopt getpeername getpgid @@ -660,6 +662,7 @@ munlock munlockall munmap nanosleep +netent nfds_t nlink_t ntohl @@ -775,6 +778,7 @@ seteuid setgid setlocale setlogmask +setnetent setpgid setregid setreuid diff --git a/src/unix/mod.rs b/src/unix/mod.rs index ef83c7c9a5532..6d9069286f3a0 100644 --- a/src/unix/mod.rs +++ b/src/unix/mod.rs @@ -206,6 +206,13 @@ s! { pub s_proto: *mut c_char, } + pub struct netent { + n_name: *mut c_char, + n_aliases: *mut *mut c_char, + n_addrtype:c_int, + n_net: u32, + } + pub struct protoent { pub p_name: *mut c_char, pub p_aliases: *mut *mut c_char, @@ -1521,6 +1528,11 @@ extern "C" { pub fn getservbyport(port: c_int, proto: *const c_char) -> *mut servent; pub fn getservent() -> *mut servent; pub fn setservent(stayopen: c_int); + pub fn getnetent() -> *mut netent; + pub fn getnetbyname(name: *const c_char) -> *mut netent; + pub fn getnetbyaddr(net: u32, type_: c_int) -> *mut netent; + pub fn setnetent(stayopen: c_int); + pub fn endnetent(); pub fn getprotobyname(name: *const c_char) -> *mut protoent; pub fn getprotobynumber(proto: c_int) -> *mut protoent; pub fn chroot(name: *const c_char) -> c_int; From a7783fd78c2ae7e10829b78b810df51a91343afb Mon Sep 17 00:00:00 2001 From: Mattias Wallin Date: Fri, 10 Apr 2026 11:48:15 +0200 Subject: [PATCH 2/2] Linux GNU: Add reentrant network entry API --- libc-test/semver/linux-gnu.txt | 3 +++ src/unix/linux_like/linux/gnu/mod.rs | 24 ++++++++++++++++++++++++ src/unix/mod.rs | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/libc-test/semver/linux-gnu.txt b/libc-test/semver/linux-gnu.txt index 243d0f6eababe..cb01e971f0549 100644 --- a/libc-test/semver/linux-gnu.txt +++ b/libc-test/semver/linux-gnu.txt @@ -610,6 +610,9 @@ getentropy getgrent_r getloadavg getmntent_r +getnetbyaddr_r +getnetbyname_r +getnetent_r getpt getpwent_r getpwnam_r diff --git a/src/unix/linux_like/linux/gnu/mod.rs b/src/unix/linux_like/linux/gnu/mod.rs index 926825c2e747e..c941fb6de45dd 100644 --- a/src/unix/linux_like/linux/gnu/mod.rs +++ b/src/unix/linux_like/linux/gnu/mod.rs @@ -1148,6 +1148,30 @@ extern "C" { buflen: size_t, result: *mut *mut crate::group, ) -> c_int; + pub fn getnetent_r( + result_buf: *mut crate::netent, + buf: *mut c_char, + buflen: size_t, + result: *mut *mut crate::netent, + h_errnop: *mut c_int, + ) -> c_int; + pub fn getnetbyname_r( + name: *const c_char, + result_buf: *mut crate::netent, + buf: *mut c_char, + buflen: size_t, + result: *mut *mut crate::netent, + h_errnop: *mut c_int, + ) -> c_int; + pub fn getnetbyaddr_r( + net: u32, + type_: c_int, + result_buf: *mut crate::netent, + buf: *mut c_char, + buflen: size_t, + result: *mut *mut crate::netent, + h_errnop: *mut c_int, + ) -> c_int; pub fn putpwent(p: *const crate::passwd, stream: *mut crate::FILE) -> c_int; pub fn putgrent(grp: *const crate::group, stream: *mut crate::FILE) -> c_int; diff --git a/src/unix/mod.rs b/src/unix/mod.rs index 6d9069286f3a0..0fb503e632986 100644 --- a/src/unix/mod.rs +++ b/src/unix/mod.rs @@ -209,7 +209,7 @@ s! { pub struct netent { n_name: *mut c_char, n_aliases: *mut *mut c_char, - n_addrtype:c_int, + n_addrtype: c_int, n_net: u32, }