• Home
  • Raw
  • Download

Lines Matching +full:use +full:- +full:libc

6 use cfg_if::cfg_if;
8 use std::convert::TryFrom;
9 use std::ffi;
10 use std::iter::Iterator;
11 use std::mem;
12 use std::option::Option;
14 use crate::net::if_::*;
15 use crate::sys::socket::{SockaddrLike, SockaddrStorage};
16 use crate::{Errno, Result};
31 /// Point-to-point destination address
37 fn get_ifu_from_sockaddr(info: &libc::ifaddrs) -> *const libc::sockaddr {
41 fn get_ifu_from_sockaddr(info: &libc::ifaddrs) -> *const libc::sockaddr {
49 /// when setting the field. See https://github.com/nix-rust/nix/issues/1709#issuecomment-1199304470
51 /// To fix this, we stack-allocate a new sockaddr_storage, zero it out, and
57 unsafe fn workaround_xnu_bug(info: &libc::ifaddrs) -> Option<SockaddrStorage> { in workaround_xnu_bug()
63 let mut dst_sock = mem::MaybeUninit::<libc::sockaddr_storage>::zeroed(); in workaround_xnu_bug()
72 // Initialize ss_len to sizeof(libc::sockaddr_storage). in workaround_xnu_bug()
74 u8::try_from(mem::size_of::<libc::sockaddr_storage>()).unwrap(); in workaround_xnu_bug()
78 &dst_sock as *const libc::sockaddr_storage as *const libc::sockaddr; in workaround_xnu_bug() constant
84 /// Create an `InterfaceAddress` from the libc struct.
85 fn from_libc_ifaddrs(info: &libc::ifaddrs) -> InterfaceAddress { in from_libc_ifaddrs()
115 /// Use the function `getifaddrs` to create this Iterator. Note that the
120 base: *mut libc::ifaddrs,
121 next: *mut libc::ifaddrs,
126 unsafe { libc::freeifaddrs(self.base) }; in drop()
132 fn next(&mut self) -> Option<<Self as Iterator>::Item> { in next()
143 /// Get interface addresses using libc's `getifaddrs`
168 pub fn getifaddrs() -> Result<InterfaceAddressIterator> { in getifaddrs()
169 let mut addrs = mem::MaybeUninit::<*mut libc::ifaddrs>::uninit(); in getifaddrs()
171 Errno::result(libc::getifaddrs(addrs.as_mut_ptr())).map(|_| { in getifaddrs()
182 use super::*;