From b49fbd9a2134471a6044cb05b9fa477045fd09c2 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Sun, 17 Mar 2024 19:08:25 +0100 Subject: [PATCH] csplit: run the file check before the arguments verifications --- src/uu/csplit/src/csplit.rs | 4 ++-- tests/by-util/test_csplit.rs | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/uu/csplit/src/csplit.rs b/src/uu/csplit/src/csplit.rs index 00bebbf4d..37ec59866 100644 --- a/src/uu/csplit/src/csplit.rs +++ b/src/uu/csplit/src/csplit.rs @@ -89,7 +89,7 @@ impl CsplitOptions { /// more than once. pub fn csplit( options: &CsplitOptions, - patterns: Vec, + patterns: Vec, input: T, ) -> Result<(), CsplitError> where @@ -97,6 +97,7 @@ where { let mut input_iter = InputSplitter::new(input.lines().enumerate()); let mut split_writer = SplitWriter::new(options); + let patterns: Vec = patterns::get_patterns(&patterns[..])?; let ret = do_csplit(&mut split_writer, patterns, &mut input_iter); // consume the rest @@ -563,7 +564,6 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { .unwrap() .map(|s| s.to_string()) .collect(); - let patterns = patterns::get_patterns(&patterns[..])?; let options = CsplitOptions::new(&matches); if file_name == "-" { let stdin = io::stdin(); diff --git a/tests/by-util/test_csplit.rs b/tests/by-util/test_csplit.rs index a47a2551c..b52c44b0e 100644 --- a/tests/by-util/test_csplit.rs +++ b/tests/by-util/test_csplit.rs @@ -1362,8 +1362,17 @@ fn precision_format() { #[test] fn zero_error() { - let (_, mut ucmd) = at_and_ucmd!(); + let (at, mut ucmd) = at_and_ucmd!(); + at.touch("in"); ucmd.args(&["in", "0"]) .fails() .stderr_contains("0: line number must be greater"); } + +#[test] +fn no_such_file() { + let (_, mut ucmd) = at_and_ucmd!(); + ucmd.args(&["in", "0"]) + .fails() + .stderr_contains("cannot access 'in': No such file or directory"); +}