From 9326dbc3de7fde53db5b34bec3dfbc825c45ee7c Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Sat, 24 Jan 2015 22:52:40 -0500 Subject: [PATCH 1/3] Cleanup cat: open files in for loop header. --- src/cat/cat.rs | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/src/cat/cat.rs b/src/cat/cat.rs index 9e6f179f1..1d8011f74 100644 --- a/src/cat/cat.rs +++ b/src/cat/cat.rs @@ -95,11 +95,7 @@ fn write_lines(files: Vec, number: NumberingMode, squeeze_blank: bool, let mut line_counter: usize = 1; - for path in files.iter() { - let (mut reader, interactive) = match open(path.as_slice()) { - Some(f) => f, - None => continue, - }; + for (mut reader, interactive) in files.iter().filter_map(|p| open(&p[])) { let mut in_buf = [0; 1024 * 31]; let mut out_buf = [0; 1024 * 64]; @@ -168,11 +164,7 @@ fn write_bytes(files: Vec, number: NumberingMode, squeeze_blank: bool, let mut line_counter: usize = 1; - for path in files.iter() { - let (mut reader, interactive) = match open(path.as_slice()) { - Some(f) => f, - None => continue, - }; + for (mut reader, interactive) in files.iter().filter_map(|p| open(&p[])) { // Flush all 1024 iterations. let mut flush_counter = range(0us, 1024); @@ -246,12 +238,7 @@ fn write_fast(files: Vec) { let mut writer = stdout_raw(); let mut in_buf = [0; 1024 * 64]; - for path in files.iter() { - let (mut reader, _) = match open(path.as_slice()) { - Some(x) => x, - None => continue, - }; - + for (mut reader, _) in files.iter().filter_map(|p| open(&p[])) { loop { match reader.read(&mut in_buf) { Ok(n) if n != 0 => { From 8a101b220309018cc8a03a16f39404d9332db276 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Sat, 24 Jan 2015 22:53:27 -0500 Subject: [PATCH 2/3] Cleanup cat: use while let instead of loop then match. --- src/cat/cat.rs | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/cat/cat.rs b/src/cat/cat.rs index 1d8011f74..0821082b1 100644 --- a/src/cat/cat.rs +++ b/src/cat/cat.rs @@ -101,11 +101,9 @@ fn write_lines(files: Vec, number: NumberingMode, squeeze_blank: bool, let mut out_buf = [0; 1024 * 64]; let mut writer = UnsafeWriter::new(out_buf.as_mut_slice(), stdout_raw()); let mut at_line_start = true; - loop { - let n = match reader.read(&mut in_buf) { - Ok(n) if n != 0 => n, - _ => break, - }; + while let Ok(n) = reader.read(&mut in_buf) { + if n == 0 { break } + let in_buf = &in_buf[..n]; let mut buf_pos = range(0, n); loop { @@ -173,11 +171,9 @@ fn write_bytes(files: Vec, number: NumberingMode, squeeze_blank: bool, let mut out_buf = [0; 1024 * 64]; let mut writer = UnsafeWriter::new(out_buf.as_mut_slice(), stdout_raw()); let mut at_line_start = true; - loop { - let n = match reader.read(&mut in_buf) { - Ok(n) if n != 0 => n, - _ => break, - }; + while let Ok(n) = reader.read(&mut in_buf) { + if n == 0 { break } + for &byte in in_buf[..n].iter() { if flush_counter.next().is_none() { writer.possibly_flush(); @@ -239,14 +235,10 @@ fn write_fast(files: Vec) { let mut in_buf = [0; 1024 * 64]; for (mut reader, _) in files.iter().filter_map(|p| open(&p[])) { - loop { - match reader.read(&mut in_buf) { - Ok(n) if n != 0 => { - // This interface is completely broken. - writer.write(&in_buf[..n]).unwrap(); - }, - _ => break - } + while let Ok(n) = reader.read(&mut in_buf) { + if n == 0 { break } + // This interface is completely broken. + writer.write(&in_buf[..n]).unwrap(); } } } From 7647a37bf84937c41b7d263a1197ee6fb2e020ee Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Sun, 25 Jan 2015 01:21:31 -0500 Subject: [PATCH 3/3] Cleanup cat: use slicing syntax. --- src/cat/cat.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cat/cat.rs b/src/cat/cat.rs index 0821082b1..d560cf908 100644 --- a/src/cat/cat.rs +++ b/src/cat/cat.rs @@ -22,7 +22,7 @@ use std::io::{IoResult}; use std::ptr::{copy_nonoverlapping_memory}; pub fn uumain(args: Vec) -> isize { - let program = args[0].as_slice(); + let program = &args[0]; let opts = [ getopts::optflag("A", "show-all", "equivalent to -vET"), getopts::optflag("b", "number-nonblank", @@ -48,8 +48,8 @@ pub fn uumain(args: Vec) -> isize { println!("Usage:"); println!(" {0} [OPTION]... [FILE]...", program); println!(""); - print(getopts::usage("Concatenate FILE(s), or standard input, to \ - standard output.", &opts).as_slice()); + print(&getopts::usage("Concatenate FILE(s), or standard input, to \ + standard output.", &opts)[]); println!(""); println!("With no FILE, or when FILE is -, read standard input."); return 0;