about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJeff Olson <olson.jeffery@gmail.com>2012-06-27 15:28:03 -0700
committerBrian Anderson <banderson@mozilla.com>2012-06-29 15:41:56 -0700
commitcfcd3e683bd5ce1259231be7f43085832cd9e3b9 (patch)
tree51297db48c52c142343dbae977a0549d7577e0f4
parentb0747742324e38d3cb8405a844c2711b76c00e2f (diff)
downloadrust-cfcd3e683bd5ce1259231be7f43085832cd9e3b9.tar.gz
rust-cfcd3e683bd5ce1259231be7f43085832cd9e3b9.zip
std/rt: cleanup and adding sockaddr_in6 mapping for win32
-rw-r--r--src/libstd/net_ip.rs1
-rw-r--r--src/libstd/net_tcp.rs3
-rw-r--r--src/libstd/uv_ll.rs37
-rw-r--r--src/rt/rust_uv.cpp12
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*