From 5139ed4ba9e3c094aa91c041c75feb10fa9d6e3a Mon Sep 17 00:00:00 2001 From: oech3 <79379754+oech3@users.noreply.github.com> Date: Sat, 1 Aug 2026 21:04:44 +0900 Subject: [PATCH] nl: remove unnecessary .is_dir() --- src/uu/nl/src/nl.rs | 57 +++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/src/uu/nl/src/nl.rs b/src/uu/nl/src/nl.rs index 37ec112451a..9f52fa8d93a 100644 --- a/src/uu/nl/src/nl.rs +++ b/src/uu/nl/src/nl.rs @@ -243,26 +243,17 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { for file in &files { if file == "-" { let mut buffer = BufReader::new(stdin()); - nl(&mut buffer, &mut stats, &settings)?; + nl(&mut buffer, &mut stats, &settings, Path::new("-"))?; } else { let path = Path::new(file); - - if path.is_dir() { - show_error!( - "{}", - translate!("nl-error-is-directory", "path" => path.maybe_quote()) - ); - set_exit_code(1); - } else { - match File::open(path) { - Ok(reader) => { - let mut buffer = BufReader::new(reader); - nl(&mut buffer, &mut stats, &settings)?; - } - Err(e) => { - show_error!("{}", e.map_err_context(|| file.maybe_quote().to_string())); - set_exit_code(1); - } + match File::open(path) { + Ok(reader) => { + let mut buffer = BufReader::new(reader); + nl(&mut buffer, &mut stats, &settings, path)?; + } + Err(e) => { + show_error!("{}", e.map_err_context(|| file.maybe_quote().to_string())); + set_exit_code(1); } } } @@ -387,19 +378,35 @@ fn write_line(writer: &mut impl Write, line: &[u8]) -> io::Result<()> { } /// `nl` implements the main functionality for an individual buffer. -fn nl(reader: &mut BufReader, stats: &mut Stats, settings: &Settings) -> UResult<()> { +fn nl( + reader: &mut BufReader, + stats: &mut Stats, + settings: &Settings, + path: &Path, +) -> UResult<()> { let mut writer = BufWriter::new(stdout()); let mut current_numbering_style = &settings.body_numbering; let mut line = Vec::new(); loop { line.clear(); - // reads up to and including b'\n'; returns 0 on EOF - let n = reader - .read_until(b'\n', &mut line) - .map_err_context(|| translate!("nl-error-could-not-read-line"))?; - if n == 0 { - break; + // reads up to and including b'\n' + match reader.read_until(b'\n', &mut line) { + Ok(0) => break, // EOF + Ok(_) => {} + #[cfg(any(target_os = "wasi", target_os = "windows"))] // wrong error message + Err(_) if path.is_dir() => { + return Err(io::Error::new( + io::ErrorKind::IsADirectory, + translate!("nl-error-is-directory", "path" => path.maybe_quote()), + ) + .into()); + } + #[cfg(not(any(target_os = "wasi", target_os = "windows")))] + Err(e) if e.kind() == io::ErrorKind::IsADirectory => { + return Err(e).map_err_context(|| path.maybe_quote().to_string()); + } + Err(e) => return Err(e).map_err_context(|| translate!("nl-error-could-not-read-line")), } let _ = line.pop_if(|byte| *byte == b'\n');