diff --git a/src/uu/csplit/src/csplit.rs b/src/uu/csplit/src/csplit.rs index 00bebbf4dcb..37ec59866b7 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/src/uu/csplit/src/csplit_error.rs b/src/uu/csplit/src/csplit_error.rs index 1559a29f8bc..4a83b637b07 100644 --- a/src/uu/csplit/src/csplit_error.rs +++ b/src/uu/csplit/src/csplit_error.rs @@ -21,7 +21,7 @@ pub enum CsplitError { MatchNotFound(String), #[error("{}: match not found on repetition {}", ._0.quote(), _1)] MatchNotFoundOnRepetition(String, usize), - #[error("line number must be greater than zero")] + #[error("0: line number must be greater than zero")] LineNumberIsZero, #[error("line number '{}' is smaller than preceding line number, {}", _0, _1)] LineNumberSmallerThanPrevious(usize, usize), diff --git a/tests/by-util/test_csplit.rs b/tests/by-util/test_csplit.rs index fb4f4cc2a02..b52c44b0e47 100644 --- a/tests/by-util/test_csplit.rs +++ b/tests/by-util/test_csplit.rs @@ -1359,3 +1359,20 @@ fn precision_format() { assert_eq!(at.read("xx 0x001"), generate(10, 51)); } } + +#[test] +fn zero_error() { + 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"); +}