diff --git a/src/header/netdb/mod.rs b/src/header/netdb/mod.rs index 366816135d..9c0804a8cc 100644 --- a/src/header/netdb/mod.rs +++ b/src/header/netdb/mod.rs @@ -421,9 +421,36 @@ pub unsafe extern "C" fn gethostbyname(name: *const c_char) -> *mut hostent { (&raw mut HOST_ENTRY).cast::() } -/// See . +/// See . +#[unsafe(no_mangle)] pub unsafe extern "C" fn getnetbyaddr(net: u32, net_type: c_int) -> *mut netent { - unimplemented!(); + let mut n: *mut netent; + if net_type != AF_INET && net_type != AF_UNSPEC && net_type != AF_INET6 { + platform::ERRNO.set(ENOENT); + return ptr::null_mut(); + } + unsafe { setnetent(NET_STAYOPEN) }; + while { + n = unsafe { getnetent() }; + !n.is_null() + } { + let n_ref = unsafe { &*n }; + let mut addr_ptr = n_ref.n_net; + let mut matched = false; + if !addr_ptr.is_null() { + let stored = unsafe { *addr_ptr }; + let stored_be = u32::from_be(stored); + matched = net == stored_be; + } + if matched { + unsafe { setnetent(NET_STAYOPEN) }; + return n; + } + } + unsafe { setnetent(NET_STAYOPEN) }; + + platform::ERRNO.set(ENOENT); + ptr::null_mut::() } /// See . diff --git a/src/platform/redox/ptrace.rs b/src/platform/redox/ptrace.rs index 51cb764683..4ac81a00c7 100644 --- a/src/platform/redox/ptrace.rs +++ b/src/platform/redox/ptrace.rs @@ -261,7 +261,10 @@ unsafe fn inner_ptrace( (&mut &session.regs).write(&redox_regs)?; Ok(0) } - _ => unimplemented!(), + _ => Err(io::Error::new( + io::ErrorKind::InvalidInput, + "unsupported ptrace request", + )), } }