Skip to content

Commit 9177f7e

Browse files
committed
std::vec: remove .as_muf_buf, replaced by .as_mut_ptr & .len.
1 parent 4c79b22 commit 9177f7e

File tree

6 files changed

+71
-112
lines changed

6 files changed

+71
-112
lines changed

src/libstd/c_str.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -295,13 +295,12 @@ unsafe fn with_c_str<T>(v: &[u8], checked: bool, f: |*libc::c_char| -> T) -> T {
295295
vec::bytes::copy_memory(buf, v);
296296
buf[v.len()] = 0;
297297

298-
buf.as_mut_buf(|buf, _| {
299-
if checked {
300-
check_for_null(v, buf as *mut libc::c_char);
301-
}
298+
let buf = buf.as_mut_ptr();
299+
if checked {
300+
check_for_null(v, buf as *mut libc::c_char);
301+
}
302302

303-
f(buf as *libc::c_char)
304-
})
303+
f(buf as *libc::c_char)
305304
} else if checked {
306305
v.to_c_str().with_ref(f)
307306
} else {

src/libstd/os.rs

Lines changed: 36 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,12 @@ static BUF_BYTES : uint = 2048u;
5959
#[cfg(unix)]
6060
pub fn getcwd() -> Path {
6161
let mut buf = [0 as libc::c_char, ..BUF_BYTES];
62-
buf.as_mut_buf(|buf, len| {
63-
unsafe {
64-
if libc::getcwd(buf, len as size_t).is_null() {
65-
fail!()
66-
}
67-
68-
Path::new(CString::new(buf as *c_char, false))
62+
unsafe {
63+
if libc::getcwd(buf.as_mut_ptr(), buf.len() as size_t).is_null() {
64+
fail!()
6965
}
70-
})
66+
Path::new(CString::new(buf.as_ptr(), false))
67+
}
7168
}
7269

7370
#[cfg(windows)]
@@ -103,20 +100,17 @@ pub mod win32 {
103100
let mut res = None;
104101
let mut done = false;
105102
while !done {
106-
let mut k: DWORD = 0;
107103
let mut buf = vec::from_elem(n as uint, 0u16);
108-
buf.as_mut_buf(|b, _sz| {
109-
k = f(b, TMPBUF_SZ as DWORD);
110-
if k == (0 as DWORD) {
111-
done = true;
112-
} else if (k == n &&
113-
libc::GetLastError() ==
114-
libc::ERROR_INSUFFICIENT_BUFFER as DWORD) {
115-
n *= (2 as DWORD);
116-
} else {
117-
done = true;
118-
}
119-
});
104+
let k = f(buf.as_mut_ptr(), TMPBUF_SZ as DWORD);
105+
if k == (0 as DWORD) {
106+
done = true;
107+
} else if (k == n &&
108+
libc::GetLastError() ==
109+
libc::ERROR_INSUFFICIENT_BUFFER as DWORD) {
110+
n *= (2 as DWORD);
111+
} else {
112+
done = true;
113+
}
120114
if k != 0 && done {
121115
let sub = buf.slice(0, k as uint);
122116
res = option::Some(str::from_utf16(sub));
@@ -363,10 +357,8 @@ pub fn self_exe_path() -> Option<Path> {
363357
if err != 0 { return None; }
364358
if sz == 0 { return None; }
365359
let mut v: ~[u8] = vec::with_capacity(sz as uint);
366-
let err = v.as_mut_buf(|buf,_| {
367-
sysctl(mib.as_ptr(), mib.len() as ::libc::c_uint,
368-
buf as *mut c_void, &mut sz, ptr::null(), 0u as size_t)
369-
});
360+
let err = sysctl(mib.as_ptr(), mib.len() as ::libc::c_uint,
361+
v.as_mut_ptr() as *mut c_void, &mut sz, ptr::null(), 0u as size_t);
370362
if err != 0 { return None; }
371363
if sz == 0 { return None; }
372364
v.set_len(sz as uint - 1); // chop off trailing NUL
@@ -394,9 +386,7 @@ pub fn self_exe_path() -> Option<Path> {
394386
_NSGetExecutablePath(ptr::mut_null(), &mut sz);
395387
if sz == 0 { return None; }
396388
let mut v: ~[u8] = vec::with_capacity(sz as uint);
397-
let err = v.as_mut_buf(|buf, _| {
398-
_NSGetExecutablePath(buf as *mut i8, &mut sz)
399-
});
389+
let err = _NSGetExecutablePath(v.as_mut_ptr() as *mut i8, &mut sz);
400390
if err != 0 { return None; }
401391
v.set_len(sz as uint - 1); // chop off trailing NUL
402392
Some(v)
@@ -628,15 +618,14 @@ pub fn last_os_error() -> ~str {
628618

629619
let mut buf = [0 as c_char, ..TMPBUF_SZ];
630620

631-
buf.as_mut_buf(|buf, len| {
632-
unsafe {
633-
if strerror_r(errno() as c_int, buf, len as size_t) < 0 {
634-
fail!("strerror_r failure");
635-
}
636-
637-
str::raw::from_c_str(buf as *c_char)
621+
let p = buf.as_mut_ptr();
622+
unsafe {
623+
if strerror_r(errno() as c_int, p, buf.len() as size_t) < 0 {
624+
fail!("strerror_r failure");
638625
}
639-
})
626+
627+
str::raw::from_c_str(p as *c_char)
628+
}
640629
}
641630

642631
#[cfg(windows)]
@@ -669,19 +658,17 @@ pub fn last_os_error() -> ~str {
669658
let mut buf = [0 as WCHAR, ..TMPBUF_SZ];
670659

671660
unsafe {
672-
buf.as_mut_buf(|buf, len| {
673-
let res = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM |
674-
FORMAT_MESSAGE_IGNORE_INSERTS,
675-
ptr::mut_null(),
676-
err,
677-
langId,
678-
buf,
679-
len as DWORD,
680-
ptr::null());
681-
if res == 0 {
682-
fail!("[{}] FormatMessage failure", errno());
683-
}
684-
});
661+
let res = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM |
662+
FORMAT_MESSAGE_IGNORE_INSERTS,
663+
ptr::mut_null(),
664+
err,
665+
langId,
666+
buf.as_mut_ptr(),
667+
buf.len() as DWORD,
668+
ptr::null());
669+
if res == 0 {
670+
fail!("[{}] FormatMessage failure", errno());
671+
}
685672

686673
str::from_utf16(buf)
687674
}

src/libstd/rand/os.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,7 @@ impl Rng for OSRng {
111111
pbBuffer: *mut BYTE);
112112
}
113113

114-
v.as_mut_buf(|ptr, len| {
115-
unsafe {rust_win32_rand_gen(self.hcryptprov, len as DWORD, ptr)}
116-
})
114+
unsafe {rust_win32_rand_gen(self.hcryptprov, v.len() as DWORD, v.as_mut_ptr())}
117115
}
118116
}
119117

src/libstd/rt/sched.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -914,13 +914,11 @@ fn new_sched_rng() -> XorShiftRng {
914914
let mut seeds = [0u32, .. 4];
915915
let size = mem::size_of_val(&seeds);
916916
loop {
917-
let nbytes = seeds.as_mut_buf(|buf, _| {
918-
unsafe {
919-
libc::read(fd,
920-
buf as *mut libc::c_void,
921-
size as libc::size_t)
922-
}
923-
});
917+
let nbytes = unsafe {
918+
libc::read(fd,
919+
seeds.as_mut_ptr() as *mut libc::c_void,
920+
size as libc::size_t)
921+
};
924922
rtassert!(nbytes as uint == size);
925923

926924
if !seeds.iter().all(|x| *x == 0) {

src/libstd/str.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,7 +1000,7 @@ pub mod raw {
10001000
/// Create a Rust string from a *u8 buffer of the given length
10011001
pub unsafe fn from_buf_len(buf: *u8, len: uint) -> ~str {
10021002
let mut v: ~[u8] = vec::with_capacity(len);
1003-
v.as_mut_buf(|vbuf, _len| ptr::copy_memory(vbuf, buf as *u8, len));
1003+
ptr::copy_memory(v.as_mut_ptr(), buf as *u8, len);
10041004
v.set_len(len);
10051005

10061006
assert!(is_utf8(v));
@@ -2282,7 +2282,7 @@ impl<'a> StrSlice<'a> for &'a str {
22822282
unsafe {
22832283
let mut v = vec::with_capacity(len);
22842284

2285-
v.as_mut_buf(|dst, _| ptr::copy_memory(dst, src, len));
2285+
ptr::copy_memory(v.as_mut_ptr(), src, len);
22862286
v.set_len(len);
22872287
::cast::transmute(v)
22882288
}
@@ -2697,7 +2697,8 @@ impl OwnedStr for ~str {
26972697
#[inline]
26982698
fn as_mut_buf<T>(&mut self, f: |*mut u8, uint| -> T) -> T {
26992699
unsafe {
2700-
raw::as_owned_vec(self).as_mut_buf(f)
2700+
let v = raw::as_owned_vec(self);
2701+
f(v.as_mut_ptr(), v.len())
27012702
}
27022703
}
27032704

src/libstd/vec.rs

Lines changed: 20 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1681,15 +1681,16 @@ impl<T> OwnedVector<T> for ~[T] {
16811681
self.pop()
16821682
}
16831683
fn truncate(&mut self, newlen: uint) {
1684-
self.as_mut_buf(|p, oldlen| {
1685-
assert!(newlen <= oldlen);
1686-
unsafe {
1687-
// This loop is optimized out for non-drop types.
1688-
for i in range(newlen, oldlen) {
1689-
ptr::read_and_zero_ptr(ptr::mut_offset(p, i as int));
1690-
}
1684+
let oldlen = self.len();
1685+
assert!(newlen <= oldlen);
1686+
1687+
unsafe {
1688+
let p = self.as_mut_ptr();
1689+
// This loop is optimized out for non-drop types.
1690+
for i in range(newlen, oldlen) {
1691+
ptr::read_and_zero_ptr(p.offset(i as int));
16911692
}
1692-
});
1693+
}
16931694
unsafe { self.set_len(newlen); }
16941695
}
16951696

@@ -2053,24 +2054,19 @@ pub trait MutableVector<'a, T> {
20532054
/// `self` and `src` must not overlap. Fails if `self` is
20542055
/// shorter than `src`.
20552056
unsafe fn copy_memory(self, src: &[T]);
2056-
2057-
/// Similar to `as_imm_buf` but passing a `*mut T`
2058-
fn as_mut_buf<U>(self, f: |*mut T, uint| -> U) -> U;
20592057
}
20602058

20612059
impl<'a,T> MutableVector<'a, T> for &'a mut [T] {
20622060
#[inline]
20632061
fn mut_slice(self, start: uint, end: uint) -> &'a mut [T] {
20642062
assert!(start <= end);
20652063
assert!(end <= self.len());
2066-
self.as_mut_buf(|p, _len| {
2067-
unsafe {
2068-
cast::transmute(Slice {
2069-
data: ptr::mut_offset(p, start as int) as *T,
2064+
unsafe {
2065+
cast::transmute(Slice {
2066+
data: self.as_mut_ptr().offset(start as int) as *T,
20702067
len: (end - start)
20712068
})
2072-
}
2073-
})
2069+
}
20742070
}
20752071

20762072
#[inline]
@@ -2189,17 +2185,9 @@ impl<'a,T> MutableVector<'a, T> for &'a mut [T] {
21892185

21902186
#[inline]
21912187
unsafe fn copy_memory(self, src: &[T]) {
2192-
self.as_mut_buf(|p_dst, len_dst| {
2193-
let len_src = src.len();
2194-
assert!(len_dst >= len_src);
2195-
ptr::copy_nonoverlapping_memory(p_dst, src.as_ptr(), len_src)
2196-
})
2197-
}
2198-
2199-
#[inline]
2200-
fn as_mut_buf<U>(self, f: |*mut T, uint| -> U) -> U {
2201-
let Slice{ data, len } = self.repr();
2202-
f(data as *mut T, len)
2188+
let len_src = src.len();
2189+
assert!(self.len() >= len_src);
2190+
ptr::copy_nonoverlapping_memory(self.as_mut_ptr(), src.as_ptr(), len_src)
22032191
}
22042192
}
22052193

@@ -2283,7 +2271,7 @@ pub mod raw {
22832271
pub unsafe fn from_buf_raw<T>(ptr: *T, elts: uint) -> ~[T] {
22842272
let mut dst = with_capacity(elts);
22852273
dst.set_len(elts);
2286-
dst.as_mut_buf(|p_dst, _len_dst| ptr::copy_memory(p_dst, ptr, elts));
2274+
ptr::copy_memory(dst.as_mut_ptr(), ptr, elts);
22872275
dst
22882276
}
22892277

@@ -2315,6 +2303,7 @@ pub mod raw {
23152303

23162304
/// Operations on `[u8]`.
23172305
pub mod bytes {
2306+
use container::Container;
23182307
use vec::MutableVector;
23192308
use ptr;
23202309

@@ -2327,9 +2316,7 @@ pub mod bytes {
23272316
impl<'a> MutableByteVector for &'a mut [u8] {
23282317
#[inline]
23292318
fn set_memory(self, value: u8) {
2330-
self.as_mut_buf(|p, len| {
2331-
unsafe { ptr::set_memory(p, value, len) };
2332-
})
2319+
unsafe { ptr::set_memory(self.as_mut_ptr(), value, self.len()) };
23332320
}
23342321
}
23352322

@@ -2351,9 +2338,7 @@ pub mod bytes {
23512338
let old_len = dst.len();
23522339
dst.reserve_additional(src.len());
23532340
unsafe {
2354-
dst.as_mut_buf(|p_dst, len_dst| {
2355-
ptr::copy_memory(p_dst.offset(len_dst as int), src.as_ptr(), src.len())
2356-
});
2341+
ptr::copy_memory(dst.as_mut_ptr().offset(old_len as int), src.as_ptr(), src.len());
23572342
dst.set_len(old_len + src.len());
23582343
}
23592344
}
@@ -3534,15 +3519,6 @@ mod tests {
35343519
}
35353520
}
35363521

3537-
#[test]
3538-
#[should_fail]
3539-
fn test_as_mut_buf_fail() {
3540-
let mut v = [(~0, @0), (~0, @0), (~0, @0), (~0, @0)];
3541-
v.as_mut_buf(|_buf, _i| {
3542-
fail!()
3543-
})
3544-
}
3545-
35463522
#[test]
35473523
#[should_fail]
35483524
fn test_copy_memory_oob() {

0 commit comments

Comments
 (0)