diff options
| author | Eric Holk <eric.holk@gmail.com> | 2012-06-14 19:32:55 -0700 |
|---|---|---|
| committer | Eric Holk <eric.holk@gmail.com> | 2012-06-21 16:11:11 -0700 |
| commit | dc3862bf58297b75a0e3d4dfdf1f66b56f51dd1d (patch) | |
| tree | a167331634a96901fc33237ffa64e9206c7646da | |
| parent | 3b9848b869c17ca369fc8bc7703e727eb19a211d (diff) | |
| download | rust-dc3862bf58297b75a0e3d4dfdf1f66b56f51dd1d.tar.gz rust-dc3862bf58297b75a0e3d4dfdf1f66b56f51dd1d.zip | |
This was unsafe, and will probably leak.
| -rw-r--r-- | src/libcore/vec.rs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 4455dbd2426..a80acc67e42 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -379,16 +379,21 @@ fn shift<T>(&v: [T]) -> T { v <-> vv; unsafe { - let vv = unsafe::to_ptr(vv); - let r <- *vv; - - for uint::range(1u, ln) {|i| - // FIXME: this isn't legal, per se... - let r <- *ptr::offset(vv, i); - push(v, r); + let mut rr; + { + let vv = unsafe::to_ptr(vv); + let mut r <- *vv; + + for uint::range(1u, ln) {|i| + // FIXME: this isn't legal, per se... + let r <- *ptr::offset(vv, i); + push(v, r); + } + rr <- r; } + unsafe::set_len(vv, 0u); - r + rr } } |
