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:49:48 -0700
committerBrian Anderson <banderson@mozilla.com>2012-04-06 15:35:48 -0700
commite0193dac6edae6c4c5dd1a8fffeb3d9f922769bd (patch)
tree1832adabd384f068d213fd35caa4ddf0835081bc /src/rt/rust_uv.cpp
parente5ccc76bc4e32538f8b2cb5f6745f42ce50ac232 (diff)
downloadrust-e0193dac6edae6c4c5dd1a8fffeb3d9f922769bd.tar.gz
rust-e0193dac6edae6c4c5dd1a8fffeb3d9f922769bd.zip
uv_buf_t's for uv_write() passed by-val .. no more mallocs or ptr cop-outs
so we're now adhering the libuv C api and passing structs by-val where
it is expected, instead of pulling pointer trickery (or worse having to
malloc structs in c++ to be passed back to rust and then into C again)
Diffstat (limited to 'src/rt/rust_uv.cpp')
-rw-r--r--src/rt/rust_uv.cpp18
1 files changed, 4 insertions, 14 deletions
diff --git a/src/rt/rust_uv.cpp b/src/rt/rust_uv.cpp
index cfe3b78b108..b4694ccf37c 100644
--- a/src/rt/rust_uv.cpp
+++ b/src/rt/rust_uv.cpp
@@ -244,13 +244,9 @@ current_kernel_malloc_alloc_cb(uv_handle_t* handle,
 }
 
 // FIXME see issue #1402
-extern "C" void*
+extern "C" uv_buf_t
 rust_uv_buf_init(char* base, size_t len) {
-	uv_buf_t* buf_ptr = (uv_buf_t*)current_kernel_malloc(
-									 sizeof(uv_buf_t),
-									 "uv_buf_t_1402");
-	*buf_ptr = uv_buf_init(base, len);
-	return buf_ptr;
+	return uv_buf_init(base, len);
 }
 
 extern "C" uv_loop_t*
@@ -302,15 +298,9 @@ rust_uv_tcp_connect(uv_connect_t* connect_ptr,
 
 extern "C" int
 rust_uv_write(uv_write_t* req, uv_stream_t* handle,
-			  void** bufs, int buf_cnt,
+			  uv_buf_t* bufs, int buf_cnt,
 			  uv_write_cb cb) {
-	// TODO github #1402 -- convert this array of pointers to
-    // uv_buf_t into an array of uv_buf_t values
-	uv_buf_t buf_vals[buf_cnt];
-	for(int ctr = 0; ctr < buf_cnt; ctr++) {
-	  buf_vals[ctr] = *((uv_buf_t*)bufs[ctr]);
-	}
-	return uv_write(req, handle, buf_vals, buf_cnt, cb);
+	return uv_write(req, handle, bufs, buf_cnt, cb);
 }
 
 extern "C" struct sockaddr_in