1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-27 19:17:43 +00:00

csplit: run the file check before the arguments verifications

This commit is contained in:
Sylvestre Ledru 2024-03-17 19:08:25 +01:00
parent 8551c55ab3
commit b49fbd9a21
2 changed files with 12 additions and 3 deletions

View file

@ -89,7 +89,7 @@ impl CsplitOptions {
/// more than once.
pub fn csplit<T>(
options: &CsplitOptions,
patterns: Vec<patterns::Pattern>,
patterns: Vec<String>,
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::Pattern> = 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();

View file

@ -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");
}