[std::str] Rename from_utf8_opt() to from_utf8(), drop the old from_utf8() behavior

This commit is contained in:
Simon Sapin 2013-12-23 17:30:49 +01:00
parent 46b01647ba
commit b8c4149293
20 changed files with 59 additions and 84 deletions

View File

@ -308,7 +308,7 @@ fn run_debuginfo_test(config: &config, props: &TestProps, testfile: &Path) {
let adb_arg = format!("export LD_LIBRARY_PATH={}; gdbserver :5039 {}/{}",
config.adb_test_dir.clone(), config.adb_test_dir.clone(),
str::from_utf8(exe_file.filename().unwrap()));
str::from_utf8(exe_file.filename().unwrap()).unwrap());
let mut process = procsrv::run_background("", config.adb_path,
[~"shell",adb_arg.clone()],

View File

@ -30,7 +30,7 @@ impl<'doc> Doc<'doc> {
}
pub fn as_str_slice<'a>(&'a self) -> &'a str {
str::from_utf8(self.data.slice(self.start, self.end))
str::from_utf8(self.data.slice(self.start, self.end)).unwrap()
}
pub fn as_str(&self) -> ~str {

View File

@ -704,7 +704,7 @@ fn should_sort_failures_before_printing_them() {
st.write_failures();
let s = match st.out {
Raw(ref m) => str::from_utf8(m.get_ref()),
Raw(ref m) => str::from_utf8(m.get_ref()).unwrap(),
Pretty(_) => unreachable!()
};

View File

@ -57,8 +57,8 @@ fn run_ar(sess: Session, args: &str, cwd: Option<&Path>,
if !o.status.success() {
sess.err(format!("{} {} failed with: {}", ar, args.connect(" "),
o.status));
sess.note(format!("stdout ---\n{}", str::from_utf8(o.output)));
sess.note(format!("stderr ---\n{}", str::from_utf8(o.error)));
sess.note(format!("stdout ---\n{}", str::from_utf8(o.output).unwrap()));
sess.note(format!("stderr ---\n{}", str::from_utf8(o.error).unwrap()));
sess.abort_if_errors();
}
o
@ -141,7 +141,7 @@ impl Archive {
/// Lists all files in an archive
pub fn files(&self) -> ~[~str] {
let output = run_ar(self.sess, "t", None, [&self.dst]);
str::from_utf8(output.output).lines().map(|s| s.to_owned()).collect()
str::from_utf8(output.output).unwrap().lines().map(|s| s.to_owned()).collect()
}
fn add_archive(&mut self, archive: &Path, name: &str, skip: &[&str]) {

View File

@ -97,7 +97,7 @@ pub fn parse_ident(st: &mut PState, last: char) -> ast::Ident {
fn parse_ident_(st: &mut PState, is_last: |char| -> bool) -> ast::Ident {
scan(st, is_last, |bytes| {
st.tcx.sess.ident_of(str::from_utf8(bytes))
st.tcx.sess.ident_of(str::from_utf8(bytes).unwrap())
})
}
@ -476,7 +476,7 @@ fn parse_abi_set(st: &mut PState) -> AbiSet {
let mut abis = AbiSet::empty();
while peek(st) != ']' {
scan(st, |c| c == ',', |bytes| {
let abi_str = str::from_utf8(bytes).to_owned();
let abi_str = str::from_utf8(bytes).unwrap().to_owned();
let abi = abi::lookup(abi_str).expect(abi_str);
abis.add(abi);
});

View File

@ -72,7 +72,7 @@ pub fn enc_ty(w: &mut MemWriter, cx: @ctxt, t: ty::t) {
None => {
let wr = &mut MemWriter::new();
enc_sty(wr, cx, &ty::get(t).sty);
let s = str::from_utf8(wr.get_ref()).to_managed();
let s = str::from_utf8(wr.get_ref()).unwrap().to_managed();
let mut short_names_cache = cx.tcx
.short_names_cache
.borrow_mut();

View File

@ -112,7 +112,7 @@ pub fn render(w: &mut io::Writer, s: &str) {
unsafe {
let my_opaque: &my_opaque = cast::transmute(opaque);
vec::raw::buf_as_slice((*text).data, (*text).size as uint, |text| {
let text = str::from_utf8(text);
let text = str::from_utf8(text).unwrap();
let mut lines = text.lines().filter(|l| stripped_filtered_line(*l).is_none());
let text = lines.to_owned_vec().connect("\n");
@ -172,14 +172,14 @@ pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector) {
let (test, shouldfail, ignore) =
vec::raw::buf_as_slice((*lang).data,
(*lang).size as uint, |lang| {
let s = str::from_utf8(lang);
let s = str::from_utf8(lang).unwrap();
(s.contains("rust"), s.contains("should_fail"),
s.contains("ignore"))
});
if !test { return }
vec::raw::buf_as_slice((*text).data, (*text).size as uint, |text| {
let tests: &mut ::test::Collector = intrinsics::transmute(opaque);
let text = str::from_utf8(text);
let text = str::from_utf8(text).unwrap();
let mut lines = text.lines().map(|l| stripped_filtered_line(l).unwrap_or(l));
let text = lines.to_owned_vec().connect("\n");
tests.add_test(text, ignore, shouldfail);

View File

@ -193,7 +193,7 @@ impl<'a> PkgScript<'a> {
Some(output) => {
debug!("run_custom: second pkg command did {:?}", output.status);
// Run the configs() function to get the configs
let cfgs = str::from_utf8(output.output).words()
let cfgs = str::from_utf8(output.output).unwrap().words()
.map(|w| w.to_owned()).collect();
Some((cfgs, output.status))
},

View File

@ -143,7 +143,7 @@ fn run_git(args: &[~str], env: Option<~[(~str, ~str)]>, cwd: &Path, err_msg: &st
let rslt = prog.finish_with_output();
if !rslt.status.success() {
fail!("{} [git returned {:?}, output = {}, error = {}]", err_msg,
rslt.status, str::from_utf8(rslt.output), str::from_utf8(rslt.error));
rslt.status, str::from_utf8(rslt.output).unwrap(), str::from_utf8(rslt.error).unwrap());
}
}
@ -279,13 +279,13 @@ fn command_line_test_with_env(args: &[~str], cwd: &Path, env: Option<~[(~str, ~s
}).expect(format!("failed to exec `{}`", cmd));
let output = prog.finish_with_output();
debug!("Output from command {} with args {:?} was {} \\{{}\\}[{:?}]",
cmd, args, str::from_utf8(output.output),
str::from_utf8(output.error),
cmd, args, str::from_utf8(output.output).unwrap(),
str::from_utf8(output.error).unwrap(),
output.status);
if !output.status.success() {
debug!("Command {} {:?} failed with exit code {:?}; its output was --- {} {} ---",
cmd, args, output.status,
str::from_utf8(output.output), str::from_utf8(output.error));
str::from_utf8(output.output).unwrap(), str::from_utf8(output.error).unwrap());
Fail(output)
}
else {
@ -445,7 +445,7 @@ fn built_library_exists(repo: &Path, short_name: &str) -> bool {
fn command_line_test_output(args: &[~str]) -> ~[~str] {
let mut result = ~[];
let p_output = command_line_test(args, &os::getcwd());
let test_output = str::from_utf8(p_output.output);
let test_output = str::from_utf8(p_output.output).unwrap();
for s in test_output.split('\n') {
result.push(s.to_owned());
}
@ -459,7 +459,7 @@ fn command_line_test_output_with_env(args: &[~str], env: ~[(~str, ~str)]) -> ~[~
Fail(_) => fail!("Command-line test failed"),
Success(r) => r
};
let test_output = str::from_utf8(p_output.output);
let test_output = str::from_utf8(p_output.output).unwrap();
for s in test_output.split('\n') {
result.push(s.to_owned());
}
@ -1199,7 +1199,7 @@ fn test_uninstall() {
let workspace = create_local_package(&CrateId::new("foo"));
command_line_test([~"uninstall", ~"foo"], workspace.path());
let output = command_line_test([~"list"], workspace.path());
assert!(!str::from_utf8(output.output).contains("foo"));
assert!(!str::from_utf8(output.output).unwrap().contains("foo"));
}
#[test]
@ -1269,8 +1269,8 @@ fn test_extern_mod() {
let outp = prog.finish_with_output();
if !outp.status.success() {
fail!("output was {}, error was {}",
str::from_utf8(outp.output),
str::from_utf8(outp.error));
str::from_utf8(outp.output).unwrap(),
str::from_utf8(outp.error).unwrap());
}
assert!(exec_file.exists() && is_executable(&exec_file));
}
@ -1324,8 +1324,8 @@ fn test_extern_mod_simpler() {
let outp = prog.finish_with_output();
if !outp.status.success() {
fail!("output was {}, error was {}",
str::from_utf8(outp.output),
str::from_utf8(outp.error));
str::from_utf8(outp.output).unwrap(),
str::from_utf8(outp.error).unwrap());
}
assert!(exec_file.exists() && is_executable(&exec_file));
}
@ -2092,7 +2092,7 @@ fn test_rustpkg_test_creates_exec() {
fn test_rustpkg_test_output() {
let workspace = create_local_package_with_test(&CrateId::new("foo"));
let output = command_line_test([~"test", ~"foo"], workspace.path());
let output_str = str::from_utf8(output.output);
let output_str = str::from_utf8(output.output).unwrap();
// The first two assertions are separate because test output may
// contain color codes, which could appear between "test f" and "ok".
assert!(output_str.contains("test f"));
@ -2123,7 +2123,7 @@ fn test_rustpkg_test_cfg() {
"#[test] #[cfg(not(foobar))] fn f() { assert!('a' != 'a'); }");
let output = command_line_test([~"test", ~"--cfg", ~"foobar", ~"foo"],
foo_workspace);
let output_str = str::from_utf8(output.output);
let output_str = str::from_utf8(output.output).unwrap();
assert!(output_str.contains("0 passed; 0 failed; 0 ignored; 0 measured"));
}
@ -2424,8 +2424,8 @@ fn correct_error_dependency() {
Fail(ProcessOutput{ error: error, output: output, .. }) => {
assert!(str::is_utf8(error));
assert!(str::is_utf8(output));
let error_str = str::from_utf8(error);
let out_str = str::from_utf8(output);
let error_str = str::from_utf8(error).unwrap();
let out_str = str::from_utf8(output).unwrap();
debug!("ss = {}", error_str);
debug!("out_str = {}", out_str);
if out_str.contains("Package badpkg depends on some_package_that_doesnt_exist") &&

View File

@ -115,7 +115,7 @@ pub fn try_getting_local_version(local_path: &Path) -> Option<Version> {
}
let mut output = None;
let output_text = str::from_utf8(outp.output);
let output_text = str::from_utf8(outp.output).unwrap();
for l in output_text.lines() {
if !l.is_whitespace() {
output = Some(l);
@ -147,8 +147,8 @@ pub fn try_getting_version(remote_path: &Path) -> Option<Version> {
let outp = opt_outp.expect("Failed to exec `git`");
if outp.status.success() {
debug!("Cloned it... ( {}, {} )",
str::from_utf8(outp.output),
str::from_utf8(outp.error));
str::from_utf8(outp.output).unwrap(),
str::from_utf8(outp.error).unwrap());
let mut output = None;
let git_dir = tmp_dir.join(".git");
debug!("(getting version, now getting tags) executing \\{git --git-dir={} tag -l\\}",
@ -158,7 +158,7 @@ pub fn try_getting_version(remote_path: &Path) -> Option<Version> {
["--git-dir=" + git_dir.as_str().unwrap(),
~"tag", ~"-l"]);
let outp = opt_outp.expect("Failed to exec `git`");
let output_text = str::from_utf8(outp.output);
let output_text = str::from_utf8(outp.output).unwrap();
debug!("Full output: ( {} ) [{:?}]", output_text, outp.status);
for l in output_text.lines() {
debug!("A line of output: {}", l);

View File

@ -488,7 +488,7 @@ mod test {
let nread = result.unwrap();
assert!(nread > 0);
let read_str = str::from_utf8(read_mem.slice_to(nread as uint));
let read_str = str::from_utf8(read_mem.slice_to(nread as uint)).unwrap();
assert_eq!(read_str, "hello");
}
// unlink

View File

@ -167,7 +167,7 @@ impl CString {
if self.buf.is_null() { return None; }
let buf = self.as_bytes();
let buf = buf.slice_to(buf.len()-1); // chop off the trailing NUL
str::from_utf8_opt(buf)
str::from_utf8(buf)
}
/// Return a CString iterator.

View File

@ -812,7 +812,7 @@ impl<'a> Formatter<'a> {
fn runplural(&mut self, value: uint, pieces: &[rt::Piece]) {
::uint::to_str_bytes(value, 10, |buf| {
let valuestr = str::from_utf8(buf);
let valuestr = str::from_utf8(buf).unwrap();
for piece in pieces.iter() {
self.run(piece, Some(valuestr));
}

View File

@ -805,7 +805,7 @@ mod test {
}
}
unlink(filename);
let read_str = str::from_utf8(read_mem);
let read_str = str::from_utf8(read_mem).unwrap();
assert_eq!(read_str, message);
})
@ -829,7 +829,7 @@ mod test {
tell_pos_post_read = read_stream.tell();
}
unlink(filename);
let read_str = str::from_utf8(read_mem);
let read_str = str::from_utf8(read_mem).unwrap();
assert_eq!(read_str, message.slice(4, 8));
assert_eq!(tell_pos_pre_read, set_cursor);
assert_eq!(tell_pos_post_read, message.len() as u64);
@ -854,7 +854,7 @@ mod test {
read_stream.read(read_mem);
}
unlink(filename);
let read_str = str::from_utf8(read_mem);
let read_str = str::from_utf8(read_mem).unwrap();
assert!(read_str == final_msg.to_owned());
})
@ -876,15 +876,15 @@ mod test {
read_stream.seek(-4, SeekEnd);
read_stream.read(read_mem);
assert_eq!(str::from_utf8(read_mem), chunk_three);
assert_eq!(str::from_utf8(read_mem).unwrap(), chunk_three);
read_stream.seek(-9, SeekCur);
read_stream.read(read_mem);
assert_eq!(str::from_utf8(read_mem), chunk_two);
assert_eq!(str::from_utf8(read_mem).unwrap(), chunk_two);
read_stream.seek(0, SeekSet);
read_stream.read(read_mem);
assert_eq!(str::from_utf8(read_mem), chunk_one);
assert_eq!(str::from_utf8(read_mem).unwrap(), chunk_one);
}
unlink(filename);
})
@ -958,7 +958,7 @@ mod test {
{
let n = f.filestem_str();
File::open(f).read(mem);
let read_str = str::from_utf8(mem);
let read_str = str::from_utf8(mem).unwrap();
let expected = match n {
None|Some("") => fail!("really shouldn't happen.."),
Some(n) => prefix+n

View File

@ -1202,7 +1202,7 @@ pub trait Buffer: Reader {
}
}
}
match str::from_utf8_opt(buf.slice_to(width)) {
match str::from_utf8(buf.slice_to(width)) {
Some(s) => Some(s.char_at(0)),
None => None
}

View File

@ -254,7 +254,7 @@ mod tests {
loop {
match input.read(buf) {
None => { break }
Some(n) => { ret.push_str(str::from_utf8(buf.slice_to(n))); }
Some(n) => { ret.push_str(str::from_utf8(buf.slice_to(n)).unwrap()); }
}
}
return ret;

View File

@ -189,7 +189,7 @@ pub trait GenericPath: Clone + GenericPathUnsafe {
/// If the path is not representable in utf-8, this returns None.
#[inline]
fn as_str<'a>(&'a self) -> Option<&'a str> {
str::from_utf8_opt(self.as_vec())
str::from_utf8(self.as_vec())
}
/// Returns the path as a byte vector
@ -220,7 +220,7 @@ pub trait GenericPath: Clone + GenericPathUnsafe {
/// See `dirname` for details.
#[inline]
fn dirname_str<'a>(&'a self) -> Option<&'a str> {
str::from_utf8_opt(self.dirname())
str::from_utf8(self.dirname())
}
/// Returns the file component of `self`, as a byte vector.
/// If `self` represents the root of the file hierarchy, returns None.
@ -230,7 +230,7 @@ pub trait GenericPath: Clone + GenericPathUnsafe {
/// See `filename` for details.
#[inline]
fn filename_str<'a>(&'a self) -> Option<&'a str> {
self.filename().and_then(str::from_utf8_opt)
self.filename().and_then(str::from_utf8)
}
/// Returns the stem of the filename of `self`, as a byte vector.
/// The stem is the portion of the filename just before the last '.'.
@ -252,7 +252,7 @@ pub trait GenericPath: Clone + GenericPathUnsafe {
/// See `filestem` for details.
#[inline]
fn filestem_str<'a>(&'a self) -> Option<&'a str> {
self.filestem().and_then(str::from_utf8_opt)
self.filestem().and_then(str::from_utf8)
}
/// Returns the extension of the filename of `self`, as an optional byte vector.
/// The extension is the portion of the filename just after the last '.'.
@ -275,7 +275,7 @@ pub trait GenericPath: Clone + GenericPathUnsafe {
/// See `extension` for details.
#[inline]
fn extension_str<'a>(&'a self) -> Option<&'a str> {
self.extension().and_then(str::from_utf8_opt)
self.extension().and_then(str::from_utf8)
}
/// Replaces the filename portion of the path with the given byte vector or string.
@ -502,7 +502,7 @@ pub trait BytesContainer {
/// Returns the receiver interpreted as a utf-8 string, if possible
#[inline]
fn container_as_str<'a>(&'a self) -> Option<&'a str> {
str::from_utf8_opt(self.container_as_bytes())
str::from_utf8(self.container_as_bytes())
}
/// Returns whether .container_as_str() is guaranteed to not fail
// FIXME (#8888): Remove unused arg once ::<for T> works

View File

@ -402,13 +402,13 @@ impl Path {
/// Returns an iterator that yields each component of the path as Option<&str>.
/// See components() for details.
pub fn str_components<'a>(&'a self) -> StrComponents<'a> {
self.components().map(str::from_utf8_opt)
self.components().map(str::from_utf8)
}
/// Returns an iterator that yields each component of the path in reverse as Option<&str>.
/// See components() for details.
pub fn rev_str_components<'a>(&'a self) -> RevStrComponents<'a> {
self.rev_components().map(str::from_utf8_opt)
self.rev_components().map(str::from_utf8)
}
}
@ -691,7 +691,7 @@ mod tests {
(s: $path:expr, $op:ident, $exp:expr, opt) => (
{
let path = Path::new($path);
let left = path.$op().map(|x| str::from_utf8(x));
let left = path.$op().map(|x| str::from_utf8(x).unwrap());
assert_eq!(left, $exp);
}
);

View File

@ -161,17 +161,8 @@ pub fn from_utf8_owned_opt(vv: ~[u8]) -> Option<~str> {
/// Once the slice has been validated as utf-8, it is transmuted in-place and
/// returned as a '&str' instead of a '&[u8]'
///
/// # Failure
///
/// Fails if invalid UTF-8
pub fn from_utf8<'a>(v: &'a [u8]) -> &'a str {
from_utf8_opt(v).expect("from_utf8: not utf-8")
}
/// Converts a vector to a string slice without performing any allocations.
///
/// Returns None if the slice is not utf-8.
pub fn from_utf8_opt<'a>(v: &'a [u8]) -> Option<&'a str> {
pub fn from_utf8<'a>(v: &'a [u8]) -> Option<&'a str> {
if is_utf8(v) {
Some(unsafe { raw::from_utf8(v) })
} else { None }
@ -3436,7 +3427,7 @@ mod tests {
let s1: ~str = ~"All mimsy were the borogoves";
let v: ~[u8] = s1.as_bytes().to_owned();
let s2: ~str = from_utf8(v).to_owned();
let s2: ~str = from_utf8(v).unwrap().to_owned();
let mut i: uint = 0u;
let n1: uint = s1.len();
let n2: uint = v.len();
@ -3961,29 +3952,13 @@ mod tests {
#[test]
fn test_str_from_utf8() {
let xs = bytes!("hello");
assert_eq!(from_utf8(xs), "hello");
assert_eq!(from_utf8(xs), Some("hello"));
let xs = bytes!("ศไทย中华Việt Nam");
assert_eq!(from_utf8(xs), "ศไทย中华Việt Nam");
}
#[test]
#[should_fail]
fn test_str_from_utf8_invalid() {
let xs = bytes!("hello", 0xff);
let _ = from_utf8(xs);
}
#[test]
fn test_str_from_utf8_opt() {
let xs = bytes!("hello");
assert_eq!(from_utf8_opt(xs), Some("hello"));
let xs = bytes!("ศไทย中华Việt Nam");
assert_eq!(from_utf8_opt(xs), Some("ศไทย中华Việt Nam"));
assert_eq!(from_utf8(xs), Some("ศไทย中华Việt Nam"));
let xs = bytes!("hello", 0xff);
assert_eq!(from_utf8_opt(xs), None);
assert_eq!(from_utf8(xs), None);
}
#[test]

View File

@ -81,7 +81,7 @@ mod map_reduce {
mapper_done => { num_mappers -= 1; }
find_reducer(k, cc) => {
let mut c;
match reducers.find(&str::from_utf8(k).to_owned()) {
match reducers.find(&str::from_utf8(k).unwrap().to_owned()) {
Some(&_c) => { c = _c; }
None => { c = 0; }
}