diff options
| author | Jeff Olson <olson.jeffery@gmail.com> | 2012-06-27 15:28:03 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-06-29 15:41:56 -0700 |
| commit | cfcd3e683bd5ce1259231be7f43085832cd9e3b9 (patch) | |
| tree | 51297db48c52c142343dbae977a0549d7577e0f4 | |
| parent | b0747742324e38d3cb8405a844c2711b76c00e2f (diff) | |
| download | rust-cfcd3e683bd5ce1259231be7f43085832cd9e3b9.tar.gz rust-cfcd3e683bd5ce1259231be7f43085832cd9e3b9.zip | |
std/rt: cleanup and adding sockaddr_in6 mapping for win32
| -rw-r--r-- | src/libstd/net_ip.rs | 1 | ||||
| -rw-r--r-- | src/libstd/net_tcp.rs | 3 | ||||
| -rw-r--r-- | src/libstd/uv_ll.rs | 37 | ||||
| -rw-r--r-- | src/rt/rust_uv.cpp | 12 |
4 files changed, 30 insertions, 23 deletions
diff --git a/src/libstd/net_ip.rs b/src/libstd/net_ip.rs index ca0c69cb724..3bd95a718a4 100644 --- a/src/libstd/net_ip.rs +++ b/src/libstd/net_ip.rs @@ -332,6 +332,7 @@ mod test { } } #[test] + #[ignore(target_os="win32")] fn test_ip_ipv6_bad_parse() { alt v6::try_parse_addr("::,~2234k;") { result::err(err_info) { diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs index c0aa3394e77..feec985b236 100644 --- a/src/libstd/net_tcp.rs +++ b/src/libstd/net_tcp.rs @@ -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 { 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, vec::slice(data, 0, vec::len(data))); if w_result.is_err() { diff --git a/src/libstd/uv_ll.rs b/src/libstd/uv_ll.rs index 5f75523e2b6..0d6043be36b 100644 --- a/src/libstd/uv_ll.rs +++ b/src/libstd/uv_ll.rs @@ -225,10 +225,18 @@ type sockaddr_in = { // unix size: 28 .. FIXME #1645 // stuck with 32 becuse of rust padding structs? +#[cfg(unix)] type sockaddr_in6 = { a0: *u8, a1: *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 // 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) -> sockaddr_in { - let mut addr_vec = str::bytes(ip); - vec::push(addr_vec, 0u8); // add null terminator - 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_ip4_addr(addr_vec_ptr, - port as libc::c_int); + str::as_c_str(ip) {|ip_buf| + rustrt::rust_uv_ip4_addr(ip_buf as *u8, + port as libc::c_int) + } } unsafe fn ip6_addr(ip: str, port: int) -> sockaddr_in6 { - let mut addr_vec = str::bytes(ip); - addr_vec += [0u8]/~; // add null terminator - 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, + str::as_c_str(ip) {|ip_buf| + rustrt::rust_uv_ip6_addr(ip_buf as *u8, port as libc::c_int); + } } unsafe fn ip4_name(src: &sockaddr_in) -> str { // 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]/~; let size = 46 as libc::size_t; 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); alt result { 0i32 { @@ -1536,7 +1539,7 @@ mod test { let native_handle_size = rustrt::rust_uv_helper_sockaddr_in6_size(); 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); log(debug, output); // FIXME #1645 .. rust appears to pad structs to the nearest byte..? diff --git a/src/rt/rust_uv.cpp b/src/rt/rust_uv.cpp index e47af4e10a3..9124172af1a 100644 --- a/src/rt/rust_uv.cpp +++ b/src/rt/rust_uv.cpp @@ -459,7 +459,7 @@ extern "C" struct sockaddr_in rust_uv_ip4_addr(const char* ip, int port) { rust_task* task = rust_get_current_task(); 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); LOG(task, stdlib, "after creating .. port: %d", addr.sin_port); return addr; @@ -468,9 +468,8 @@ extern "C" struct sockaddr_in6 rust_uv_ip6_addr(const char* ip, int port) { rust_task* task = rust_get_current_task(); LOG(task, stdlib, "before creating addr_ptr.. ip %s" \ - "port %d", ip, port); - struct sockaddr_in6 addr = uv_ip6_addr(ip, port); - return addr; + " port %d\n", ip, port); + return uv_ip6_addr(ip, port); } extern "C" int 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 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* |
