diff options
| author | Jeff Olson <olson.jeffery@gmail.com> | 2012-03-22 21:15:39 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-04-06 15:35:48 -0700 |
| commit | e5ccc76bc4e32538f8b2cb5f6745f42ce50ac232 (patch) | |
| tree | a9f275b248045f076a13b8a2bc193b68b3849b64 /src/rt/rust_uv.cpp | |
| parent | 43c82bdb453523be57512c91d267bac05018ed19 (diff) | |
| download | rust-e5ccc76bc4e32538f8b2cb5f6745f42ce50ac232.tar.gz rust-e5ccc76bc4e32538f8b2cb5f6745f42ce50ac232.zip | |
fixed by-val from rust->c, use ++ sigil in native fn sig <-- NEVAR FORGET
have to use ++ sigil in rust-side extern fn decls in order to have rust actually copy the struct, by value, onto the C stack. gotcha, indeed. also adding a helper method to verify/remind how to pass a struct by-val into C... check out the rust fn sig for rust_uv_ip4_test_verify_port_val() for more infos
Diffstat (limited to 'src/rt/rust_uv.cpp')
| -rw-r--r-- | src/rt/rust_uv.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/rt/rust_uv.cpp b/src/rt/rust_uv.cpp index c62af8edf40..cfe3b78b108 100644 --- a/src/rt/rust_uv.cpp +++ b/src/rt/rust_uv.cpp @@ -287,12 +287,12 @@ rust_uv_last_error(uv_loop_t* loop) { extern "C" int rust_uv_tcp_connect(uv_connect_t* connect_ptr, uv_tcp_t* tcp_ptr, - void* addr_ptr, + struct sockaddr_in addr, uv_connect_cb cb) { //return uv_tcp_connect(connect_ptr, tcp_ptr, addr, cb); printf("inside rust_uv_tcp_connect\n"); - sockaddr_in addr_tmp = *((sockaddr_in*)addr_ptr); - sockaddr_in addr = addr_tmp; + //sockaddr_in addr_tmp = *((sockaddr_in*)addr_ptr); + //sockaddr_in addr = addr_tmp; printf("before tcp_connect .. port: %d\n", addr.sin_port); int result = uv_tcp_connect(connect_ptr, tcp_ptr, addr, cb); printf ("leaving rust_uv_tcp_connect.. and result: %d\n", @@ -313,10 +313,17 @@ rust_uv_write(uv_write_t* req, uv_stream_t* handle, return uv_write(req, handle, buf_vals, buf_cnt, cb); } -extern "C" sockaddr_in +extern "C" struct sockaddr_in rust_uv_ip4_addr(const char* ip, int port) { printf("before creating addr_ptr.. ip %s port %d\n", ip, port); - sockaddr_in addr = uv_ip4_addr("173.194.33.40", 80); + struct sockaddr_in addr = uv_ip4_addr(ip, port); printf("after creating .. port: %d\n", addr.sin_port); return addr; } + +extern "C" bool +rust_uv_ip4_test_verify_port_val(struct sockaddr_in addr, + unsigned int expected) { + printf("inside c++ ip4_test .. port: %u\n", addr.sin_port); + return addr.sin_port == expected; +} |
