mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-27 07:55:03 +00:00
Replace str::raw::buf_as_slice with c_str_to_static_slice. Close #3843.
This commit is contained in:
parent
1310212c27
commit
967c7d828a
@ -238,20 +238,6 @@ pub fn last_uv_error<H, W: Watcher + NativeHandle<*H>>(watcher: &W) -> UvError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn uv_error_to_io_error(uverr: UvError) -> IoError {
|
pub fn uv_error_to_io_error(uverr: UvError) -> IoError {
|
||||||
|
|
||||||
// XXX: Could go in str::raw
|
|
||||||
unsafe fn c_str_to_static_slice(s: *libc::c_char) -> &'static str {
|
|
||||||
let s = s as *u8;
|
|
||||||
let mut (curr, len) = (s, 0u);
|
|
||||||
while *curr != 0u8 {
|
|
||||||
len += 1u;
|
|
||||||
curr = ptr::offset(s, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
str::raw::buf_as_slice(s, len, |d| cast::transmute(d))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
// Importing error constants
|
// Importing error constants
|
||||||
use rt::uv::uvll::*;
|
use rt::uv::uvll::*;
|
||||||
@ -259,7 +245,7 @@ pub fn uv_error_to_io_error(uverr: UvError) -> IoError {
|
|||||||
|
|
||||||
// uv error descriptions are static
|
// uv error descriptions are static
|
||||||
let c_desc = uvll::strerror(&*uverr);
|
let c_desc = uvll::strerror(&*uverr);
|
||||||
let desc = c_str_to_static_slice(c_desc);
|
let desc = str::raw::c_str_to_static_slice(c_desc);
|
||||||
|
|
||||||
let kind = match uverr.code {
|
let kind = match uverr.code {
|
||||||
UNKNOWN => OtherIoError,
|
UNKNOWN => OtherIoError,
|
||||||
|
@ -1396,12 +1396,19 @@ pub mod raw {
|
|||||||
/// Converts a byte to a string.
|
/// Converts a byte to a string.
|
||||||
pub unsafe fn from_byte(u: u8) -> ~str { raw::from_bytes([u]) }
|
pub unsafe fn from_byte(u: u8) -> ~str { raw::from_bytes([u]) }
|
||||||
|
|
||||||
/// Form a slice from a *u8 buffer of the given length without copying.
|
/// Form a slice from a C string. Unsafe because the caller must ensure the
|
||||||
pub unsafe fn buf_as_slice<T>(buf: *u8, len: uint,
|
/// C string has the static lifetime, or else the return value may be
|
||||||
f: &fn(v: &str) -> T) -> T {
|
/// invalidated later.
|
||||||
let v = (buf, len + 1);
|
pub unsafe fn c_str_to_static_slice(s: *libc::c_char) -> &'static str {
|
||||||
|
let s = s as *u8;
|
||||||
|
let mut (curr, len) = (s, 0u);
|
||||||
|
while *curr != 0u8 {
|
||||||
|
len += 1u;
|
||||||
|
curr = ptr::offset(s, len);
|
||||||
|
}
|
||||||
|
let v = (s, len + 1);
|
||||||
assert!(is_utf8(::cast::transmute(v)));
|
assert!(is_utf8(::cast::transmute(v)));
|
||||||
f(::cast::transmute(v))
|
::cast::transmute(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user