Skip to content

Commit d1d8559

Browse files
committed
auto merge of #7047 : bblum/rust/bug_triage, r=graydon
r? anybody
2 parents bf41586 + 8081aea commit d1d8559

File tree

8 files changed

+18
-23
lines changed

8 files changed

+18
-23
lines changed

src/libextra/timer.rs

-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,6 @@ pub fn recv_timeout<T:Copy + Owned>(iotask: &IoTask,
131131
unsafe {
132132
let wait_po = cast::transmute_mut(wait_po);
133133

134-
// FIXME: This could be written clearer (#2618)
135134
either::either(
136135
|_| {
137136
None

src/libstd/pipes.rs

+1
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ struct BufferResource<T> {
315315
impl<T> Drop for BufferResource<T> {
316316
fn finalize(&self) {
317317
unsafe {
318+
// FIXME(#4330) Need self by value to get mutability.
318319
let this: &mut BufferResource<T> = transmute(self);
319320

320321
let mut b = move_it!(this.buffer);

src/libstd/rt/rc.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ impl<T> Drop for RC<T> {
7878
assert!(self.refcount() > 0);
7979

8080
unsafe {
81-
// XXX: Mutable finalizer
81+
// FIXME(#4330) Need self by value to get mutability.
8282
let this: &mut RC<T> = cast::transmute_mut(self);
8383

8484
match *this.get_mut_state() {

src/libstd/rt/uv/mod.rs

+1-15
Original file line numberDiff line numberDiff line change
@@ -238,28 +238,14 @@ pub fn last_uv_error<H, W: Watcher + NativeHandle<*H>>(watcher: &W) -> UvError {
238238
}
239239
240240
pub fn uv_error_to_io_error(uverr: UvError) -> IoError {
241-
242-
// XXX: Could go in str::raw
243-
unsafe fn c_str_to_static_slice(s: *libc::c_char) -> &'static str {
244-
let s = s as *u8;
245-
let mut (curr, len) = (s, 0u);
246-
while *curr != 0u8 {
247-
len += 1u;
248-
curr = ptr::offset(s, len);
249-
}
250-
251-
str::raw::buf_as_slice(s, len, |d| cast::transmute(d))
252-
}
253-
254-
255241
unsafe {
256242
// Importing error constants
257243
use rt::uv::uvll::*;
258244
use rt::io::*;
259245
260246
// uv error descriptions are static
261247
let c_desc = uvll::strerror(&*uverr);
262-
let desc = c_str_to_static_slice(c_desc);
248+
let desc = str::raw::c_str_to_static_slice(c_desc);
263249
264250
let kind = match uverr.code {
265251
UNKNOWN => OtherIoError,

src/libstd/run.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ impl Process {
429429

430430
impl Drop for Process {
431431
fn finalize(&self) {
432-
// FIXME #4943: transmute is bad.
432+
// FIXME(#4330) Need self by value to get mutability.
433433
let mut_self: &mut Process = unsafe { cast::transmute(self) };
434434

435435
mut_self.finish();

src/libstd/str.rs

+12-5
Original file line numberDiff line numberDiff line change
@@ -1396,12 +1396,19 @@ pub mod raw {
13961396
/// Converts a byte to a string.
13971397
pub unsafe fn from_byte(u: u8) -> ~str { raw::from_bytes([u]) }
13981398

1399-
/// Form a slice from a *u8 buffer of the given length without copying.
1400-
pub unsafe fn buf_as_slice<T>(buf: *u8, len: uint,
1401-
f: &fn(v: &str) -> T) -> T {
1402-
let v = (buf, len + 1);
1399+
/// Form a slice from a C string. Unsafe because the caller must ensure the
1400+
/// C string has the static lifetime, or else the return value may be
1401+
/// invalidated later.
1402+
pub unsafe fn c_str_to_static_slice(s: *libc::c_char) -> &'static str {
1403+
let s = s as *u8;
1404+
let mut (curr, len) = (s, 0u);
1405+
while *curr != 0u8 {
1406+
len += 1u;
1407+
curr = ptr::offset(s, len);
1408+
}
1409+
let v = (s, len + 1);
14031410
assert!(is_utf8(::cast::transmute(v)));
1404-
f(::cast::transmute(v))
1411+
::cast::transmute(v)
14051412
}
14061413

14071414
/**

src/libstd/task/spawn.rs

+1
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ impl Drop for TCB {
323323
// Runs on task exit.
324324
fn finalize(&self) {
325325
unsafe {
326+
// FIXME(#4330) Need self by value to get mutability.
326327
let this: &mut TCB = transmute(self);
327328

328329
// If we are failing, the whole taskgroup needs to die.

src/libstd/unstable/atomics.rs

+1
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ impl<T> Drop for AtomicOption<T> {
275275
// This will ensure that the contained data is
276276
// destroyed, unless it's null.
277277
unsafe {
278+
// FIXME(#4330) Need self by value to get mutability.
278279
let this : &mut AtomicOption<T> = cast::transmute(self);
279280
let _ = this.take(SeqCst);
280281
}

0 commit comments

Comments
 (0)