diff options
| author | bors <bors@rust-lang.org> | 2015-03-14 08:55:31 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-03-14 08:55:31 +0000 |
| commit | 766a4e1acc06061a30cf456840a9915526fb681e (patch) | |
| tree | 16d2c602028d25d21f28b2d28b69a334e7c849d3 /src/libstd | |
| parent | f7453f940b6cbc2b07a2c0d7612a11fa435aad95 (diff) | |
| parent | 85080fa81d3ae6770eb228a982670746e55bf4d9 (diff) | |
| download | rust-766a4e1acc06061a30cf456840a9915526fb681e.tar.gz rust-766a4e1acc06061a30cf456840a9915526fb681e.zip | |
Auto merge of #23333 - oli-obk:slice_from_raw_parts, r=alexcrichton
at least that's what the docs say: http://doc.rust-lang.org/std/slice/fn.from_raw_parts.html A few situations got prettier. In some situations the mutability of the resulting and source pointers differed (and was cast away by transmute), the mutability matches now.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/old_io/mod.rs | 10 | ||||
| -rw-r--r-- | src/libstd/sys/common/wtf8.rs | 18 |
2 files changed, 14 insertions, 14 deletions
diff --git a/src/libstd/old_io/mod.rs b/src/libstd/old_io/mod.rs index 9d438978f42..332b941bcc0 100644 --- a/src/libstd/old_io/mod.rs +++ b/src/libstd/old_io/mod.rs @@ -931,15 +931,15 @@ impl<'a> Reader for &'a mut (Reader+'a) { // Private function here because we aren't sure if we want to expose this as // API yet. If so, it should be a method on Vec. unsafe fn slice_vec_capacity<'a, T>(v: &'a mut Vec<T>, start: uint, end: uint) -> &'a mut [T] { - use raw::Slice; + use slice; use ptr::PtrExt; assert!(start <= end); assert!(end <= v.capacity()); - transmute(Slice { - data: v.as_ptr().offset(start as int), - len: end - start - }) + slice::from_raw_parts_mut( + v.as_mut_ptr().offset(start as int), + end - start + ) } /// A `RefReader` is a struct implementing `Reader` which contains a reference diff --git a/src/libstd/sys/common/wtf8.rs b/src/libstd/sys/common/wtf8.rs index 6c17f9910ac..4c0b26f8649 100644 --- a/src/libstd/sys/common/wtf8.rs +++ b/src/libstd/sys/common/wtf8.rs @@ -29,7 +29,6 @@ use core::prelude::*; use core::char::{encode_utf8_raw, encode_utf16_raw}; use core::str::{char_range_at_raw, next_code_point}; -use core::raw::Slice as RawSlice; use ascii::*; use borrow::Cow; @@ -214,10 +213,10 @@ impl Wtf8Buf { unsafe { // Attempt to not use an intermediate buffer by just pushing bytes // directly onto this string. - let slice = RawSlice { - data: self.bytes.as_ptr().offset(cur_len as int), - len: 4, - }; + let slice = slice::from_raw_parts_mut( + self.bytes.as_mut_ptr().offset(cur_len as int), + 4 + ); let used = encode_utf8_raw(code_point.value, mem::transmute(slice)) .unwrap_or(0); self.bytes.set_len(cur_len + used); @@ -725,10 +724,11 @@ pub fn is_code_point_boundary(slice: &Wtf8, index: uint) -> bool { /// Copied from core::str::raw::slice_unchecked #[inline] pub unsafe fn slice_unchecked(s: &Wtf8, begin: uint, end: uint) -> &Wtf8 { - mem::transmute(RawSlice { - data: s.bytes.as_ptr().offset(begin as int), - len: end - begin, - }) + // memory layout of an &[u8] and &Wtf8 are the same + mem::transmute(slice::from_raw_parts( + s.bytes.as_ptr().offset(begin as int), + end - begin + )) } /// Copied from core::str::raw::slice_error_fail |
