diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2015-11-02 16:23:22 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2015-11-09 22:55:50 -0800 |
| commit | 3d28b8b98e6e4f55ef4ecd8babf0a050f48a3d11 (patch) | |
| tree | 343087c9e62da65e2780db851682280697064c5b /src/libstd/net | |
| parent | c8a29c2092cec369a751051a2bfed093522ff6e8 (diff) | |
| download | rust-3d28b8b98e6e4f55ef4ecd8babf0a050f48a3d11.tar.gz rust-3d28b8b98e6e4f55ef4ecd8babf0a050f48a3d11.zip | |
std: Migrate to the new libc
* Delete `sys::unix::{c, sync}` as these are now all folded into libc itself
* Update all references to use `libc` as a result.
* Update all references to the new flat namespace.
* Moves all windows bindings into sys::c
Diffstat (limited to 'src/libstd/net')
| -rw-r--r-- | src/libstd/net/addr.rs | 34 | ||||
| -rw-r--r-- | src/libstd/net/ip.rs | 64 |
2 files changed, 53 insertions, 45 deletions
diff --git a/src/libstd/net/addr.rs b/src/libstd/net/addr.rs index cf0ede30dcc..66c1ab720b6 100644 --- a/src/libstd/net/addr.rs +++ b/src/libstd/net/addr.rs @@ -13,10 +13,10 @@ use prelude::v1::*; use fmt; use hash; use io; -use libc::{self, socklen_t, sa_family_t}; use mem; use net::{lookup_host, ntoh, hton, IpAddr, Ipv4Addr, Ipv6Addr}; use option; +use sys::net::netc as c; use sys_common::{FromInner, AsInner, IntoInner}; use vec; @@ -39,12 +39,12 @@ pub enum SocketAddr { /// An IPv4 socket address which is a (ip, port) combination. #[derive(Copy)] #[stable(feature = "rust1", since = "1.0.0")] -pub struct SocketAddrV4 { inner: libc::sockaddr_in } +pub struct SocketAddrV4 { inner: c::sockaddr_in } /// An IPv6 socket address. #[derive(Copy)] #[stable(feature = "rust1", since = "1.0.0")] -pub struct SocketAddrV6 { inner: libc::sockaddr_in6 } +pub struct SocketAddrV6 { inner: c::sockaddr_in6 } impl SocketAddr { /// Creates a new socket address from the (ip, port) pair. @@ -80,8 +80,8 @@ impl SocketAddrV4 { #[stable(feature = "rust1", since = "1.0.0")] pub fn new(ip: Ipv4Addr, port: u16) -> SocketAddrV4 { SocketAddrV4 { - inner: libc::sockaddr_in { - sin_family: libc::AF_INET as sa_family_t, + inner: c::sockaddr_in { + sin_family: c::AF_INET as c::sa_family_t, sin_port: hton(port), sin_addr: *ip.as_inner(), .. unsafe { mem::zeroed() } @@ -93,7 +93,7 @@ impl SocketAddrV4 { #[stable(feature = "rust1", since = "1.0.0")] pub fn ip(&self) -> &Ipv4Addr { unsafe { - &*(&self.inner.sin_addr as *const libc::in_addr as *const Ipv4Addr) + &*(&self.inner.sin_addr as *const c::in_addr as *const Ipv4Addr) } } @@ -109,8 +109,8 @@ impl SocketAddrV6 { pub fn new(ip: Ipv6Addr, port: u16, flowinfo: u32, scope_id: u32) -> SocketAddrV6 { SocketAddrV6 { - inner: libc::sockaddr_in6 { - sin6_family: libc::AF_INET6 as sa_family_t, + inner: c::sockaddr_in6 { + sin6_family: c::AF_INET6 as c::sa_family_t, sin6_port: hton(port), sin6_addr: *ip.as_inner(), sin6_flowinfo: hton(flowinfo), @@ -124,7 +124,7 @@ impl SocketAddrV6 { #[stable(feature = "rust1", since = "1.0.0")] pub fn ip(&self) -> &Ipv6Addr { unsafe { - &*(&self.inner.sin6_addr as *const libc::in6_addr as *const Ipv6Addr) + &*(&self.inner.sin6_addr as *const c::in6_addr as *const Ipv6Addr) } } @@ -143,26 +143,26 @@ impl SocketAddrV6 { pub fn scope_id(&self) -> u32 { ntoh(self.inner.sin6_scope_id) } } -impl FromInner<libc::sockaddr_in> for SocketAddrV4 { - fn from_inner(addr: libc::sockaddr_in) -> SocketAddrV4 { +impl FromInner<c::sockaddr_in> for SocketAddrV4 { + fn from_inner(addr: c::sockaddr_in) -> SocketAddrV4 { SocketAddrV4 { inner: addr } } } -impl FromInner<libc::sockaddr_in6> for SocketAddrV6 { - fn from_inner(addr: libc::sockaddr_in6) -> SocketAddrV6 { +impl FromInner<c::sockaddr_in6> for SocketAddrV6 { + fn from_inner(addr: c::sockaddr_in6) -> SocketAddrV6 { SocketAddrV6 { inner: addr } } } -impl<'a> IntoInner<(*const libc::sockaddr, socklen_t)> for &'a SocketAddr { - fn into_inner(self) -> (*const libc::sockaddr, socklen_t) { +impl<'a> IntoInner<(*const c::sockaddr, c::socklen_t)> for &'a SocketAddr { + fn into_inner(self) -> (*const c::sockaddr, c::socklen_t) { match *self { SocketAddr::V4(ref a) => { - (a as *const _ as *const _, mem::size_of_val(a) as socklen_t) + (a as *const _ as *const _, mem::size_of_val(a) as c::socklen_t) } SocketAddr::V6(ref a) => { - (a as *const _ as *const _, mem::size_of_val(a) as socklen_t) + (a as *const _ as *const _, mem::size_of_val(a) as c::socklen_t) } } } diff --git a/src/libstd/net/ip.rs b/src/libstd/net/ip.rs index 827a3eb9bf6..f3ad148e3da 100644 --- a/src/libstd/net/ip.rs +++ b/src/libstd/net/ip.rs @@ -16,11 +16,12 @@ use prelude::v1::*; use cmp::Ordering; -use hash; use fmt; -use libc; -use sys_common::{AsInner, FromInner}; +use hash; +use mem; use net::{hton, ntoh}; +use sys::net::netc as c; +use sys_common::{AsInner, FromInner}; /// An IP address, either an IPv4 or IPv6 address. #[unstable(feature = "ip_addr", reason = "recent addition", issue = "27801")] @@ -36,14 +37,14 @@ pub enum IpAddr { #[derive(Copy)] #[stable(feature = "rust1", since = "1.0.0")] pub struct Ipv4Addr { - inner: libc::in_addr, + inner: c::in_addr, } /// Representation of an IPv6 address. #[derive(Copy)] #[stable(feature = "rust1", since = "1.0.0")] pub struct Ipv6Addr { - inner: libc::in6_addr, + inner: c::in6_addr, } #[allow(missing_docs)] @@ -65,7 +66,7 @@ impl Ipv4Addr { #[stable(feature = "rust1", since = "1.0.0")] pub fn new(a: u8, b: u8, c: u8, d: u8) -> Ipv4Addr { Ipv4Addr { - inner: libc::in_addr { + inner: c::in_addr { s_addr: hton(((a as u32) << 24) | ((b as u32) << 16) | ((c as u32) << 8) | @@ -239,11 +240,11 @@ impl Ord for Ipv4Addr { } } -impl AsInner<libc::in_addr> for Ipv4Addr { - fn as_inner(&self) -> &libc::in_addr { &self.inner } +impl AsInner<c::in_addr> for Ipv4Addr { + fn as_inner(&self) -> &c::in_addr { &self.inner } } -impl FromInner<libc::in_addr> for Ipv4Addr { - fn from_inner(addr: libc::in_addr) -> Ipv4Addr { +impl FromInner<c::in_addr> for Ipv4Addr { + fn from_inner(addr: c::in_addr) -> Ipv4Addr { Ipv4Addr { inner: addr } } } @@ -270,25 +271,32 @@ impl Ipv6Addr { #[stable(feature = "rust1", since = "1.0.0")] pub fn new(a: u16, b: u16, c: u16, d: u16, e: u16, f: u16, g: u16, h: u16) -> Ipv6Addr { - Ipv6Addr { - inner: libc::in6_addr { - s6_addr: [hton(a), hton(b), hton(c), hton(d), - hton(e), hton(f), hton(g), hton(h)] - } - } + let mut addr: c::in6_addr = unsafe { mem::zeroed() }; + addr.s6_addr = [(a >> 8) as u8, a as u8, + (b >> 8) as u8, b as u8, + (c >> 8) as u8, c as u8, + (d >> 8) as u8, d as u8, + (e >> 8) as u8, e as u8, + (f >> 8) as u8, f as u8, + (g >> 8) as u8, g as u8, + (h >> 8) as u8, h as u8]; + Ipv6Addr { inner: addr } } /// Returns the eight 16-bit segments that make up this address. #[stable(feature = "rust1", since = "1.0.0")] pub fn segments(&self) -> [u16; 8] { - [ntoh(self.inner.s6_addr[0]), - ntoh(self.inner.s6_addr[1]), - ntoh(self.inner.s6_addr[2]), - ntoh(self.inner.s6_addr[3]), - ntoh(self.inner.s6_addr[4]), - ntoh(self.inner.s6_addr[5]), - ntoh(self.inner.s6_addr[6]), - ntoh(self.inner.s6_addr[7])] + let arr = &self.inner.s6_addr; + [ + (arr[0] as u16) << 8 | (arr[1] as u16), + (arr[2] as u16) << 8 | (arr[3] as u16), + (arr[4] as u16) << 8 | (arr[5] as u16), + (arr[6] as u16) << 8 | (arr[7] as u16), + (arr[8] as u16) << 8 | (arr[9] as u16), + (arr[10] as u16) << 8 | (arr[11] as u16), + (arr[12] as u16) << 8 | (arr[13] as u16), + (arr[14] as u16) << 8 | (arr[15] as u16), + ] } /// Returns true for the special 'unspecified' address ::. @@ -502,11 +510,11 @@ impl Ord for Ipv6Addr { } } -impl AsInner<libc::in6_addr> for Ipv6Addr { - fn as_inner(&self) -> &libc::in6_addr { &self.inner } +impl AsInner<c::in6_addr> for Ipv6Addr { + fn as_inner(&self) -> &c::in6_addr { &self.inner } } -impl FromInner<libc::in6_addr> for Ipv6Addr { - fn from_inner(addr: libc::in6_addr) -> Ipv6Addr { +impl FromInner<c::in6_addr> for Ipv6Addr { + fn from_inner(addr: c::in6_addr) -> Ipv6Addr { Ipv6Addr { inner: addr } } } |
