about summary refs log tree commit diff
path: root/src/rt/rust_uv.cpp
diff options
context:
space:
mode:
authorJeff Olson <olson.jeffery@gmail.com>2012-03-22 21:15:39 -0700
committerBrian Anderson <banderson@mozilla.com>2012-04-06 15:35:48 -0700
commite5ccc76bc4e32538f8b2cb5f6745f42ce50ac232 (patch)
treea9f275b248045f076a13b8a2bc193b68b3849b64 /src/rt/rust_uv.cpp
parent43c82bdb453523be57512c91d267bac05018ed19 (diff)
downloadrust-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.cpp17
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;
+}