Begin work on getnameinfo

This commit is contained in:
Jeremy Soller
2019-01-14 19:26:35 -07:00
parent c57ac53d28
commit 8dabff129a
+42 -8
View File
@@ -3,7 +3,7 @@
mod dns;
use core::str::FromStr;
use core::{mem, ptr, str};
use core::{mem, ptr, slice, str};
use alloc::boxed::Box;
use alloc::str::SplitWhitespace;
@@ -1000,27 +1000,35 @@ pub unsafe extern "C" fn getaddrinfo(
res: *mut *mut addrinfo,
) -> c_int {
//TODO: getaddrinfo
let node_c = if node.is_null() {
let node_opt = if node.is_null() {
None
} else {
Some(CStr::from_ptr(node))
};
let service_c = if service.is_null() {
let service_opt = if service.is_null() {
None
} else {
Some(CStr::from_ptr(service))
};
let hints_opt = if hints.is_null() {
None
} else {
Some(&*hints)
};
eprintln!(
"getaddrinfo({:?}, {:?})",
node_c.map(|c| str::from_utf8_unchecked(c.to_bytes())),
service_c.map(|c| str::from_utf8_unchecked(c.to_bytes()))
node_opt.map(|c| str::from_utf8_unchecked(c.to_bytes())),
service_opt.map(|c| str::from_utf8_unchecked(c.to_bytes()))
);
platform::errno = ENOSYS;
EAI_SYSTEM
}
#[no_mangle]
pub unsafe extern "C" fn getnameinfo(
addr: *const sockaddr,
addrlen: socklen_t,
@@ -1030,12 +1038,38 @@ pub unsafe extern "C" fn getnameinfo(
servlen: socklen_t,
flags: c_int,
) -> c_int {
unimplemented!();
if addrlen as usize != mem::size_of::<sockaddr_in>() {
return EAI_FAMILY;
}
let addr = &*(addr as *const sockaddr_in);
let host_opt = if host.is_null() {
None
} else {
Some(slice::from_raw_parts_mut(host, hostlen as usize))
};
let serv_opt = if serv.is_null() {
None
} else {
Some(slice::from_raw_parts_mut(serv, servlen as usize))
};
eprintln!("getnameinfo({:p}, {}, {:#x})", addr, addrlen, flags);
platform::errno = ENOSYS;
EAI_SYSTEM
}
#[no_mangle]
pub extern "C" fn freeaddrinfo(res: *mut addrinfo) {
pub unsafe extern "C" fn freeaddrinfo(res: *mut addrinfo) {
let mut ai = res;
while !ai.is_null() {
let bai = Box::from_raw(ai);
ai = (*ai).ai_next;
drop(bai);
}
}
#[no_mangle]