diff --git a/src/uu/rev/src/rev.rs b/src/uu/rev/src/rev.rs index b06d377..b980d16 100644 --- a/src/uu/rev/src/rev.rs +++ b/src/uu/rev/src/rev.rs @@ -24,24 +24,22 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { let zero = matches.get_flag(options::ZERO); let sep = if zero { b'\0' } else { b'\n' }; - match files { - Some(files) => { - for path in files { - let Ok(file) = std::fs::File::open(path) else { - uucore::error::set_exit_code(1); - uucore::show_error!("cannot open {path}: No such file or directory"); - continue; - }; - if let Err(err) = rev_stream(file, sep) { - uucore::error::set_exit_code(1); - uucore::show_error!("cannot read {path}: {err}"); - } + + if let Some(files) = files { + for path in files { + let Ok(file) = std::fs::File::open(path) else { + uucore::error::set_exit_code(1); + uucore::show_error!("cannot open {path}: No such file or directory"); + continue; + }; + if let Err(err) = rev_stream(file, sep) { + uucore::error::set_exit_code(1); + uucore::show_error!("cannot read {path}: {err}"); } } - None => { - let stdin = std::io::stdin().lock(); - let _ = rev_stream(stdin, sep); - } + } else { + let stdin = std::io::stdin().lock(); + let _ = rev_stream(stdin, sep); } Ok(()) @@ -54,15 +52,15 @@ fn rev_stream(stream: impl Read, sep: u8) -> std::io::Result<()> { loop { buf.clear(); stream.read_until(sep, &mut buf)?; - if buf.last().copied() != Some(sep) { - buf.reverse(); - stdout.write_all(&buf)?; - break; - } else { + if buf.last().copied() == Some(sep) { buf.pop(); buf.reverse(); buf.push(sep); stdout.write_all(&buf)?; + } else { + buf.reverse(); + stdout.write_all(&buf)?; + break; } } Ok(())