std/rt: cleanup and adding sockaddr_in6 mapping for win32
This commit is contained in:
committed by
Brian Anderson
parent
b074774232
commit
cfcd3e683b
@@ -332,6 +332,7 @@ mod test {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
|
#[ignore(target_os="win32")]
|
||||||
fn test_ip_ipv6_bad_parse() {
|
fn test_ip_ipv6_bad_parse() {
|
||||||
alt v6::try_parse_addr("::,~2234k;") {
|
alt v6::try_parse_addr("::,~2234k;") {
|
||||||
result::err(err_info) {
|
result::err(err_info) {
|
||||||
|
|||||||
@@ -823,7 +823,8 @@ Implementation of `io::reader` iface for a buffered `net::tcp::tcp_socket`
|
|||||||
"]
|
"]
|
||||||
impl tcp_socket_buf of io::writer for @tcp_socket_buf {
|
impl tcp_socket_buf of io::writer for @tcp_socket_buf {
|
||||||
fn write(data: [const u8]/&) unsafe {
|
fn write(data: [const u8]/&) unsafe {
|
||||||
let socket_data_ptr = ptr::addr_of(*((*(self.data)).sock).socket_data);
|
let socket_data_ptr =
|
||||||
|
ptr::addr_of(*((*(self.data)).sock).socket_data);
|
||||||
let w_result = write_common_impl(socket_data_ptr,
|
let w_result = write_common_impl(socket_data_ptr,
|
||||||
vec::slice(data, 0, vec::len(data)));
|
vec::slice(data, 0, vec::len(data)));
|
||||||
if w_result.is_err() {
|
if w_result.is_err() {
|
||||||
|
|||||||
@@ -225,10 +225,18 @@ type sockaddr_in = {
|
|||||||
|
|
||||||
// unix size: 28 .. FIXME #1645
|
// unix size: 28 .. FIXME #1645
|
||||||
// stuck with 32 becuse of rust padding structs?
|
// stuck with 32 becuse of rust padding structs?
|
||||||
|
#[cfg(unix)]
|
||||||
type sockaddr_in6 = {
|
type sockaddr_in6 = {
|
||||||
a0: *u8, a1: *u8,
|
a0: *u8, a1: *u8,
|
||||||
a2: *u8, a3: *u8
|
a2: *u8, a3: *u8
|
||||||
};
|
};
|
||||||
|
#[cfg(windows)]
|
||||||
|
type sockaddr_in6 = {
|
||||||
|
a0: *u8, a1: *u8,
|
||||||
|
a2: *u8, a3: *u8,
|
||||||
|
a4: *u8, a5: *u8,
|
||||||
|
a6: *u8, a7: *u8
|
||||||
|
};
|
||||||
|
|
||||||
// unix size: 28 .. FIXME #1645
|
// unix size: 28 .. FIXME #1645
|
||||||
// stuck with 32 becuse of rust padding structs?
|
// stuck with 32 becuse of rust padding structs?
|
||||||
@@ -753,25 +761,17 @@ unsafe fn buf_init(++input: *u8, len: uint) -> uv_buf_t {
|
|||||||
}
|
}
|
||||||
unsafe fn ip4_addr(ip: str, port: int)
|
unsafe fn ip4_addr(ip: str, port: int)
|
||||||
-> sockaddr_in {
|
-> sockaddr_in {
|
||||||
let mut addr_vec = str::bytes(ip);
|
str::as_c_str(ip) {|ip_buf|
|
||||||
vec::push(addr_vec, 0u8); // add null terminator
|
rustrt::rust_uv_ip4_addr(ip_buf as *u8,
|
||||||
let addr_vec_ptr = vec::unsafe::to_ptr(addr_vec);
|
port as libc::c_int)
|
||||||
let ip_back = str::from_bytes(addr_vec);
|
}
|
||||||
log(debug, #fmt("vec val: '%s' length: %u",
|
|
||||||
ip_back, vec::len(addr_vec)));
|
|
||||||
ret rustrt::rust_uv_ip4_addr(addr_vec_ptr,
|
|
||||||
port as libc::c_int);
|
|
||||||
}
|
}
|
||||||
unsafe fn ip6_addr(ip: str, port: int)
|
unsafe fn ip6_addr(ip: str, port: int)
|
||||||
-> sockaddr_in6 {
|
-> sockaddr_in6 {
|
||||||
let mut addr_vec = str::bytes(ip);
|
str::as_c_str(ip) {|ip_buf|
|
||||||
addr_vec += [0u8]/~; // add null terminator
|
rustrt::rust_uv_ip6_addr(ip_buf as *u8,
|
||||||
let addr_vec_ptr = vec::unsafe::to_ptr(addr_vec);
|
|
||||||
let ip_back = str::from_bytes(addr_vec);
|
|
||||||
log(debug, #fmt("vec val: '%s' length: %u",
|
|
||||||
ip_back, vec::len(addr_vec)));
|
|
||||||
ret rustrt::rust_uv_ip6_addr(addr_vec_ptr,
|
|
||||||
port as libc::c_int);
|
port as libc::c_int);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
unsafe fn ip4_name(src: &sockaddr_in) -> str {
|
unsafe fn ip4_name(src: &sockaddr_in) -> str {
|
||||||
// ipv4 addr max size: 15 + 1 trailing null byte
|
// ipv4 addr max size: 15 + 1 trailing null byte
|
||||||
@@ -800,7 +800,10 @@ unsafe fn ip6_name(src: &sockaddr_in6) -> str {
|
|||||||
0u8,0u8,0u8,0u8,0u8,0u8]/~;
|
0u8,0u8,0u8,0u8,0u8,0u8]/~;
|
||||||
let size = 46 as libc::size_t;
|
let size = 46 as libc::size_t;
|
||||||
vec::as_buf(dst) {|dst_buf|
|
vec::as_buf(dst) {|dst_buf|
|
||||||
let result = rustrt::rust_uv_ip6_name(src as *sockaddr_in6,
|
let src_unsafe_ptr = src as *sockaddr_in6;
|
||||||
|
log(debug, #fmt("val of src *sockaddr_in6: %? sockaddr_in6: %?",
|
||||||
|
src_unsafe_ptr, src));
|
||||||
|
let result = rustrt::rust_uv_ip6_name(src_unsafe_ptr,
|
||||||
dst_buf, size);
|
dst_buf, size);
|
||||||
alt result {
|
alt result {
|
||||||
0i32 {
|
0i32 {
|
||||||
@@ -1536,7 +1539,7 @@ mod test {
|
|||||||
let native_handle_size =
|
let native_handle_size =
|
||||||
rustrt::rust_uv_helper_sockaddr_in6_size();
|
rustrt::rust_uv_helper_sockaddr_in6_size();
|
||||||
let rust_handle_size = sys::size_of::<sockaddr_in6>();
|
let rust_handle_size = sys::size_of::<sockaddr_in6>();
|
||||||
let output = #fmt("sockaddr_in -- native: %u rust: %u",
|
let output = #fmt("sockaddr_in6 -- native: %u rust: %u",
|
||||||
native_handle_size as uint, rust_handle_size);
|
native_handle_size as uint, rust_handle_size);
|
||||||
log(debug, output);
|
log(debug, output);
|
||||||
// FIXME #1645 .. rust appears to pad structs to the nearest byte..?
|
// FIXME #1645 .. rust appears to pad structs to the nearest byte..?
|
||||||
|
|||||||
@@ -459,7 +459,7 @@ extern "C" struct sockaddr_in
|
|||||||
rust_uv_ip4_addr(const char* ip, int port) {
|
rust_uv_ip4_addr(const char* ip, int port) {
|
||||||
rust_task* task = rust_get_current_task();
|
rust_task* task = rust_get_current_task();
|
||||||
LOG(task, stdlib, "before creating addr_ptr.. ip %s" \
|
LOG(task, stdlib, "before creating addr_ptr.. ip %s" \
|
||||||
"port %d", ip, port);
|
" port %d\n", ip, port);
|
||||||
struct sockaddr_in addr = uv_ip4_addr(ip, port);
|
struct sockaddr_in addr = uv_ip4_addr(ip, port);
|
||||||
LOG(task, stdlib, "after creating .. port: %d", addr.sin_port);
|
LOG(task, stdlib, "after creating .. port: %d", addr.sin_port);
|
||||||
return addr;
|
return addr;
|
||||||
@@ -468,9 +468,8 @@ extern "C" struct sockaddr_in6
|
|||||||
rust_uv_ip6_addr(const char* ip, int port) {
|
rust_uv_ip6_addr(const char* ip, int port) {
|
||||||
rust_task* task = rust_get_current_task();
|
rust_task* task = rust_get_current_task();
|
||||||
LOG(task, stdlib, "before creating addr_ptr.. ip %s" \
|
LOG(task, stdlib, "before creating addr_ptr.. ip %s" \
|
||||||
"port %d", ip, port);
|
" port %d\n", ip, port);
|
||||||
struct sockaddr_in6 addr = uv_ip6_addr(ip, port);
|
return uv_ip6_addr(ip, port);
|
||||||
return addr;
|
|
||||||
}
|
}
|
||||||
extern "C" int
|
extern "C" int
|
||||||
rust_uv_ip4_name(struct sockaddr_in* src, char* dst, size_t size) {
|
rust_uv_ip4_name(struct sockaddr_in* src, char* dst, size_t size) {
|
||||||
@@ -478,7 +477,10 @@ rust_uv_ip4_name(struct sockaddr_in* src, char* dst, size_t size) {
|
|||||||
}
|
}
|
||||||
extern "C" int
|
extern "C" int
|
||||||
rust_uv_ip6_name(struct sockaddr_in6* src, char* dst, size_t size) {
|
rust_uv_ip6_name(struct sockaddr_in6* src, char* dst, size_t size) {
|
||||||
return uv_ip6_name(src, dst, size);
|
int result = uv_ip6_name(src, dst, size);
|
||||||
|
printf("rust_uv_ip6_name: src ptr: %lu dst result: '%s'\n",
|
||||||
|
(unsigned long int)src, dst);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" uintptr_t*
|
extern "C" uintptr_t*
|
||||||
|
|||||||
Reference in New Issue
Block a user