From 7301eff5ba772deb13e60fe5ba7b5f640ea165a2 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Fri, 19 Dec 2025 12:18:21 -0700 Subject: [PATCH] Stub ifaddrs.h --- src/header/ifaddrs/cbindgen.toml | 12 ++++++++++ src/header/ifaddrs/mod.rs | 41 ++++++++++++++++++++++++++++++++ src/header/mod.rs | 1 + 3 files changed, 54 insertions(+) create mode 100644 src/header/ifaddrs/cbindgen.toml create mode 100644 src/header/ifaddrs/mod.rs diff --git a/src/header/ifaddrs/cbindgen.toml b/src/header/ifaddrs/cbindgen.toml new file mode 100644 index 0000000000..1b9e3bfc65 --- /dev/null +++ b/src/header/ifaddrs/cbindgen.toml @@ -0,0 +1,12 @@ +sys_includes = ["features.h", "netinet/in.h", "sys/socket.h"] +include_guard = "_RELIBC_IFADDRS_H" +language = "C" +style = "Tag" +no_includes = true +cpp_compat = true + +[export.rename] +"sockaddr" = "struct sockaddr" + +[enum] +prefix_with_name = true diff --git a/src/header/ifaddrs/mod.rs b/src/header/ifaddrs/mod.rs new file mode 100644 index 0000000000..3df9df0244 --- /dev/null +++ b/src/header/ifaddrs/mod.rs @@ -0,0 +1,41 @@ +//! `ifaddrs.h` implementation + +use core::ptr; + +use crate::{ + header::{errno, stdlib, sys_socket::sockaddr}, + platform::{self, types::*}, +}; + +#[repr(C)] +union ifaddrs_ifa_ifu { + ifu_broadaddr: *mut sockaddr, + ifu_dstaddr: *mut sockaddr, +} + +#[repr(C)] +pub struct ifaddrs { + ifa_next: *mut ifaddrs, + ifa_name: *mut c_char, + ifa_flags: c_uint, + ifa_addr: *mut sockaddr, + ifa_netmask: *mut sockaddr, + ifa_ifu: ifaddrs_ifa_ifu, + ifa_data: *mut c_void, +} + +#[unsafe(no_mangle)] +pub unsafe extern "C" fn freeifaddrs(mut ifa: *mut ifaddrs) { + while !ifa.is_null() { + let next = (*ifa).ifa_next; + stdlib::free(ifa.cast()); + ifa = next; + } +} + +#[unsafe(no_mangle)] +pub unsafe extern "C" fn getifaddrs(ifap: *mut *mut ifaddrs) -> c_int { + //TODO: implement getifaddrs + platform::ERRNO.set(errno::ENOSYS); + -1 +} diff --git a/src/header/mod.rs b/src/header/mod.rs index fec4f937b9..c01b384ebc 100644 --- a/src/header/mod.rs +++ b/src/header/mod.rs @@ -29,6 +29,7 @@ pub mod getopt; pub mod glob; pub mod grp; // TODO: iconv.h +pub mod ifaddrs; pub mod inttypes; // iso646.h implemented in C pub mod langinfo;