mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-04-26 17:03:43 +02:00
build fix
This commit is contained in:
parent
7c2e0b8507
commit
dff2605544
1 changed files with 24 additions and 14 deletions
|
@ -108,8 +108,9 @@ fn get_s6_addr(&sa: &sockaddr_in6) -> &[u8; 16] {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(windows))]
|
#[cfg(not(windows))]
|
||||||
|
#[inline(always)]
|
||||||
fn get_s6_addr(&sa: &sockaddr_in6) -> &[u8; 16] {
|
fn get_s6_addr(&sa: &sockaddr_in6) -> &[u8; 16] {
|
||||||
&sa.sin6_addr.s6_addr
|
unsafe { &*(&sa.sin6_addr.s6_addr as *const [u8; 16]) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An IPv4 or IPv6 socket address that directly encapsulates C sockaddr types.
|
/// An IPv4 or IPv6 socket address that directly encapsulates C sockaddr types.
|
||||||
|
@ -502,10 +503,12 @@ impl InetAddress {
|
||||||
let mut addr = Self::new();
|
let mut addr = Self::new();
|
||||||
addr.sin.sin_family = AF_INET.as_();
|
addr.sin.sin_family = AF_INET.as_();
|
||||||
addr.sin.sin_port = port.to_be().as_();
|
addr.sin.sin_port = port.to_be().as_();
|
||||||
#[cfg(not(windows))] {
|
#[cfg(not(windows))]
|
||||||
|
{
|
||||||
addr.sin.sin_addr.s_addr = (0x7f000001 as u32).to_be();
|
addr.sin.sin_addr.s_addr = (0x7f000001 as u32).to_be();
|
||||||
}
|
}
|
||||||
#[cfg(windows)] unsafe {
|
#[cfg(windows)]
|
||||||
|
unsafe {
|
||||||
*addr.sin.sin_addr.S_un.S_addr_mut() = (0x7f000001 as u32).to_be();
|
*addr.sin.sin_addr.S_un.S_addr_mut() = (0x7f000001 as u32).to_be();
|
||||||
}
|
}
|
||||||
addr
|
addr
|
||||||
|
@ -593,13 +596,15 @@ impl InetAddress {
|
||||||
if ip2.len() == 4 {
|
if ip2.len() == 4 {
|
||||||
self.sin.sin_family = AF_INET.as_();
|
self.sin.sin_family = AF_INET.as_();
|
||||||
self.sin.sin_port = port.as_();
|
self.sin.sin_port = port.as_();
|
||||||
#[cfg(windows)] {
|
#[cfg(windows)]
|
||||||
|
{
|
||||||
self.sin.sin_addr.S_un.S_un_b_mut().s_b1 = ip2[0];
|
self.sin.sin_addr.S_un.S_un_b_mut().s_b1 = ip2[0];
|
||||||
self.sin.sin_addr.S_un.S_un_b_mut().s_b2 = ip2[1];
|
self.sin.sin_addr.S_un.S_un_b_mut().s_b2 = ip2[1];
|
||||||
self.sin.sin_addr.S_un.S_un_b_mut().s_b3 = ip2[2];
|
self.sin.sin_addr.S_un.S_un_b_mut().s_b3 = ip2[2];
|
||||||
self.sin.sin_addr.S_un.S_un_b_mut().s_b4 = ip2[3];
|
self.sin.sin_addr.S_un.S_un_b_mut().s_b4 = ip2[3];
|
||||||
}
|
}
|
||||||
#[cfg(not(windows))] {
|
#[cfg(not(windows))]
|
||||||
|
{
|
||||||
copy_nonoverlapping(ip2.as_ptr(), (&mut self.sin.sin_addr.s_addr as *mut u32).cast::<u8>(), 4);
|
copy_nonoverlapping(ip2.as_ptr(), (&mut self.sin.sin_addr.s_addr as *mut u32).cast::<u8>(), 4);
|
||||||
}
|
}
|
||||||
AF_INET
|
AF_INET
|
||||||
|
@ -619,13 +624,15 @@ impl InetAddress {
|
||||||
unsafe {
|
unsafe {
|
||||||
match self.sa.sa_family as AddressFamilyType {
|
match self.sa.sa_family as AddressFamilyType {
|
||||||
AF_INET => {
|
AF_INET => {
|
||||||
#[cfg(windows)] {
|
#[cfg(windows)]
|
||||||
|
{
|
||||||
&*(self.sin.sin_addr.S_un.S_addr() as *const u32).cast::<[u8; 4]>()
|
&*(self.sin.sin_addr.S_un.S_addr() as *const u32).cast::<[u8; 4]>()
|
||||||
}
|
}
|
||||||
#[cfg(not(windows))] {
|
#[cfg(not(windows))]
|
||||||
|
{
|
||||||
&*(&self.sin.sin_addr.s_addr as *const u32).cast::<[u8; 4]>()
|
&*(&self.sin.sin_addr.s_addr as *const u32).cast::<[u8; 4]>()
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
AF_INET6 => &*(&self.sin6.sin6_addr as *const in6_addr).cast::<[u8; 16]>(),
|
AF_INET6 => &*(&self.sin6.sin6_addr as *const in6_addr).cast::<[u8; 16]>(),
|
||||||
_ => &[],
|
_ => &[],
|
||||||
}
|
}
|
||||||
|
@ -851,11 +858,13 @@ impl InetAddress {
|
||||||
unsafe {
|
unsafe {
|
||||||
match self.sa.sa_family as AddressFamilyType {
|
match self.sa.sa_family as AddressFamilyType {
|
||||||
AF_INET => {
|
AF_INET => {
|
||||||
#[cfg(not(windows))] {
|
#[cfg(not(windows))]
|
||||||
|
{
|
||||||
let ip = &*(&self.sin.sin_addr.s_addr as *const u32).cast::<[u8; 4]>();
|
let ip = &*(&self.sin.sin_addr.s_addr as *const u32).cast::<[u8; 4]>();
|
||||||
format!("{}.{}.{}.{}", ip[0], ip[1], ip[2], ip[3])
|
format!("{}.{}.{}.{}", ip[0], ip[1], ip[2], ip[3])
|
||||||
}
|
}
|
||||||
#[cfg(windows)] {
|
#[cfg(windows)]
|
||||||
|
{
|
||||||
let ip = self.sin.sin_addr.S_un.S_addr().to_ne_bytes();
|
let ip = self.sin.sin_addr.S_un.S_addr().to_ne_bytes();
|
||||||
format!("{}.{}.{}.{}", ip[0], ip[1], ip[2], ip[3])
|
format!("{}.{}.{}.{}", ip[0], ip[1], ip[2], ip[3])
|
||||||
}
|
}
|
||||||
|
@ -960,14 +969,16 @@ impl FromStr for InetAddress {
|
||||||
IpAddr::V4(v4) => {
|
IpAddr::V4(v4) => {
|
||||||
addr.sin.sin_family = AF_INET.as_();
|
addr.sin.sin_family = AF_INET.as_();
|
||||||
addr.sin.sin_port = port.as_();
|
addr.sin.sin_port = port.as_();
|
||||||
#[cfg(windows)] {
|
#[cfg(windows)]
|
||||||
|
{
|
||||||
let oct = v4.octets();
|
let oct = v4.octets();
|
||||||
addr.sin.sin_addr.S_un.S_un_b_mut().s_b1 = oct[0];
|
addr.sin.sin_addr.S_un.S_un_b_mut().s_b1 = oct[0];
|
||||||
addr.sin.sin_addr.S_un.S_un_b_mut().s_b2 = oct[1];
|
addr.sin.sin_addr.S_un.S_un_b_mut().s_b2 = oct[1];
|
||||||
addr.sin.sin_addr.S_un.S_un_b_mut().s_b3 = oct[2];
|
addr.sin.sin_addr.S_un.S_un_b_mut().s_b3 = oct[2];
|
||||||
addr.sin.sin_addr.S_un.S_un_b_mut().s_b4 = oct[3];
|
addr.sin.sin_addr.S_un.S_un_b_mut().s_b4 = oct[3];
|
||||||
}
|
}
|
||||||
#[cfg(not(windows))] {
|
#[cfg(not(windows))]
|
||||||
|
{
|
||||||
copy_nonoverlapping(v4.octets().as_ptr(), (&mut (addr.sin.sin_addr.s_addr) as *mut u32).cast(), 4);
|
copy_nonoverlapping(v4.octets().as_ptr(), (&mut (addr.sin.sin_addr.s_addr) as *mut u32).cast(), 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1028,8 +1039,7 @@ impl Ord for InetAddress {
|
||||||
match self.sa.sa_family as AddressFamilyType {
|
match self.sa.sa_family as AddressFamilyType {
|
||||||
0 => Ordering::Equal,
|
0 => Ordering::Equal,
|
||||||
AF_INET => {
|
AF_INET => {
|
||||||
let ip_ordering =
|
let ip_ordering = u32::from_be(get_s_addr(&self.sin)).cmp(&u32::from_be(get_s_addr(&other.sin)));
|
||||||
u32::from_be(get_s_addr(&self.sin)).cmp(&u32::from_be(get_s_addr(&other.sin)));
|
|
||||||
if ip_ordering == Ordering::Equal {
|
if ip_ordering == Ordering::Equal {
|
||||||
u16::from_be(self.sin.sin_port as u16).cmp(&u16::from_be(other.sin.sin_port as u16))
|
u16::from_be(self.sin.sin_port as u16).cmp(&u16::from_be(other.sin.sin_port as u16))
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Reference in a new issue