about summary refs log tree commit diff
path: root/src/libcore/vec.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcore/vec.rs')
-rw-r--r--src/libcore/vec.rs12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs
index 1533b07861c..448678abf7c 100644
--- a/src/libcore/vec.rs
+++ b/src/libcore/vec.rs
@@ -102,9 +102,6 @@ extern mod rustrt {
     fn vec_reserve_shared(++t: *sys::TypeDesc,
                           ++v: **unsafe::VecRepr,
                           ++n: libc::size_t);
-    fn vec_from_buf_shared(++t: *sys::TypeDesc,
-                           ++ptr: *(),
-                           ++count: libc::size_t) -> *unsafe::VecRepr;
 }
 
 #[abi = "rust-intrinsic"]
@@ -1727,10 +1724,11 @@ mod unsafe {
      */
     #[inline(always)]
     unsafe fn from_buf<T>(ptr: *T, elts: uint) -> ~[T] {
-        return ::unsafe::reinterpret_cast(
-            rustrt::vec_from_buf_shared(sys::get_type_desc::<T>(),
-                                        ptr as *(),
-                                        elts as size_t));
+        let mut dst = ~[];
+        reserve(dst, elts);
+        set_len(dst, elts);
+        as_buf(dst, |p_dst, _len_dst| ptr::memcpy(p_dst, ptr, elts));
+        dst
     }
 
     /**