Skip to content

Commit ef03a46

Browse files
authored
Merge pull request #5806 from cakebaker/nl_is_a_directory
nl: don't exit if input is directory
2 parents ae279c9 + 1c6bf69 commit ef03a46

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

src/uu/nl/src/nl.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ use clap::{crate_version, Arg, ArgAction, Command};
77
use std::fs::File;
88
use std::io::{stdin, BufRead, BufReader, Read};
99
use std::path::Path;
10-
use uucore::error::{FromIo, UResult, USimpleError};
11-
use uucore::{format_usage, help_about, help_section, help_usage};
10+
use uucore::error::{set_exit_code, FromIo, UResult, USimpleError};
11+
use uucore::{format_usage, help_about, help_section, help_usage, show_error};
1212

1313
mod helper;
1414

@@ -205,9 +205,15 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
205205
nl(&mut buffer, &mut stats, &settings)?;
206206
} else {
207207
let path = Path::new(file);
208-
let reader = File::open(path).map_err_context(|| file.to_string())?;
209-
let mut buffer = BufReader::new(reader);
210-
nl(&mut buffer, &mut stats, &settings)?;
208+
209+
if path.is_dir() {
210+
show_error!("{}: Is a directory", path.display());
211+
set_exit_code(1);
212+
} else {
213+
let reader = File::open(path).map_err_context(|| file.to_string())?;
214+
let mut buffer = BufReader::new(reader);
215+
nl(&mut buffer, &mut stats, &settings)?;
216+
}
211217
}
212218
}
213219

tests/by-util/test_nl.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,3 +634,20 @@ fn test_empty_section_delimiter() {
634634
.stdout_is(" 1\ta\n \n 2\tb\n");
635635
}
636636
}
637+
638+
#[test]
639+
fn test_directory_as_input() {
640+
let (at, mut ucmd) = at_and_ucmd!();
641+
let dir = "dir";
642+
let file = "file";
643+
let content = "aaa";
644+
645+
at.mkdir(dir);
646+
at.write(file, content);
647+
648+
ucmd.arg(dir)
649+
.arg(file)
650+
.fails()
651+
.stderr_is(format!("nl: {dir}: Is a directory\n"))
652+
.stdout_contains(content);
653+
}

0 commit comments

Comments
 (0)