Skip to content

Commit

Permalink
Expose SockAddr::from_raw_sockaddr
Browse files Browse the repository at this point in the history
  • Loading branch information
coolreader18 committed Jun 8, 2021
1 parent 99fc58e commit 83c0117
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 19 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Expand Up @@ -6,10 +6,12 @@ This project adheres to [Semantic Versioning](https://semver.org/).
## [Unreleased] - ReleaseDate
### Added
- Added `if_nameindex` (#[1445](https://github.com/nix-rust/nix/pull/1445))
- Exposed `SockAddr::from_raw_sockaddr` (#[1447](https://github.com/nix-rust/nix/pull/1447))

### Changed
### Fixed
### Removed
- Removed `SockAddr/InetAddr::to_str` in favor of `<_ as ToString>::to_string` (#[1447](https://github.com/nix-rust/nix/pull/1447))

## [0.21.0] - 31 May 2021
### Added
Expand Down
8 changes: 4 additions & 4 deletions src/ifaddrs.rs
Expand Up @@ -46,8 +46,8 @@ impl InterfaceAddress {
/// Create an `InterfaceAddress` from the libc struct.
fn from_libc_ifaddrs(info: &libc::ifaddrs) -> InterfaceAddress {
let ifname = unsafe { ffi::CStr::from_ptr(info.ifa_name) };
let address = unsafe { SockAddr::from_libc_sockaddr(info.ifa_addr) };
let netmask = unsafe { SockAddr::from_libc_sockaddr(info.ifa_netmask) };
let address = unsafe { SockAddr::from_raw_sockaddr(info.ifa_addr) };
let netmask = unsafe { SockAddr::from_raw_sockaddr(info.ifa_netmask) };
let mut addr = InterfaceAddress {
interface_name: ifname.to_string_lossy().to_string(),
flags: InterfaceFlags::from_bits_truncate(info.ifa_flags as i32),
Expand All @@ -59,9 +59,9 @@ impl InterfaceAddress {

let ifu = get_ifu_from_sockaddr(info);
if addr.flags.contains(InterfaceFlags::IFF_POINTOPOINT) {
addr.destination = unsafe { SockAddr::from_libc_sockaddr(ifu) };
addr.destination = unsafe { SockAddr::from_raw_sockaddr(ifu) };
} else if addr.flags.contains(InterfaceFlags::IFF_BROADCAST) {
addr.broadcast = unsafe { SockAddr::from_libc_sockaddr(ifu) };
addr.broadcast = unsafe { SockAddr::from_raw_sockaddr(ifu) };
}

addr
Expand Down
16 changes: 4 additions & 12 deletions src/sys/socket/addr.rs
Expand Up @@ -342,10 +342,6 @@ impl InetAddr {
sa.sin6_scope_id)),
}
}

pub fn to_str(&self) -> String {
format!("{}", self)
}
}

impl fmt::Display for InetAddr {
Expand Down Expand Up @@ -720,10 +716,6 @@ impl SockAddr {
}
}

pub fn to_str(&self) -> String {
format!("{}", self)
}

/// Creates a `SockAddr` struct from libc's sockaddr.
///
/// Supports only the following address families: Unix, Inet (v4 & v6), Netlink and System.
Expand All @@ -734,7 +726,7 @@ impl SockAddr {
/// unsafe because it takes a raw pointer as argument. The caller must
/// ensure that the pointer is valid.
#[cfg(not(target_os = "fuchsia"))]
pub(crate) unsafe fn from_libc_sockaddr(addr: *const libc::sockaddr) -> Option<SockAddr> {
pub unsafe fn from_raw_sockaddr(addr: *const libc::sockaddr) -> Option<SockAddr> {
if addr.is_null() {
None
} else {
Expand Down Expand Up @@ -1313,7 +1305,7 @@ mod tests {
fn test_macos_loopback_datalink_addr() {
let bytes = [20i8, 18, 1, 0, 24, 3, 0, 0, 108, 111, 48, 0, 0, 0, 0, 0];
let sa = bytes.as_ptr() as *const libc::sockaddr;
let _sock_addr = unsafe { SockAddr::from_libc_sockaddr(sa) };
let _sock_addr = unsafe { SockAddr::from_raw_sockaddr(sa) };
assert!(_sock_addr.is_none());
}

Expand All @@ -1328,7 +1320,7 @@ mod tests {
let bytes = [20i8, 18, 7, 0, 6, 3, 6, 0, 101, 110, 48, 24, 101, -112, -35, 76, -80];
let ptr = bytes.as_ptr();
let sa = ptr as *const libc::sockaddr;
let _sock_addr = unsafe { SockAddr::from_libc_sockaddr(sa) };
let _sock_addr = unsafe { SockAddr::from_raw_sockaddr(sa) };

assert!(_sock_addr.is_some());

Expand All @@ -1350,7 +1342,7 @@ mod tests {
let bytes = [25u8, 0, 0, 0, 6, 0, 6, 0, 24, 101, 144, 221, 76, 176];
let ptr = bytes.as_ptr();
let sa = ptr as *const libc::sockaddr;
let _sock_addr = unsafe { SockAddr::from_libc_sockaddr(sa) };
let _sock_addr = unsafe { SockAddr::from_raw_sockaddr(sa) };

assert!(_sock_addr.is_some());

Expand Down
6 changes: 3 additions & 3 deletions test/sys/test_socket.rs
Expand Up @@ -27,7 +27,7 @@ pub fn test_inetv4_addr_to_sock_addr() {
_ => panic!("nope"),
}

assert_eq!(addr.to_str(), "127.0.0.1:3000");
assert_eq!(addr.to_string(), "127.0.0.1:3000");

let inet = addr.to_std();
assert_eq!(actual, inet);
Expand Down Expand Up @@ -143,8 +143,8 @@ pub fn test_getsockname() {
.expect("socket failed");
let sockaddr = SockAddr::new_unix(&sockname).unwrap();
bind(sock, &sockaddr).expect("bind failed");
assert_eq!(sockaddr.to_str(),
getsockname(sock).expect("getsockname failed").to_str());
assert_eq!(sockaddr.to_string(),
getsockname(sock).expect("getsockname failed").to_string());
}

#[test]
Expand Down

0 comments on commit 83c0117

Please sign in to comment.