mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 03:27:44 +00:00
nl: defer showing "line number overflow" error
This commit is contained in:
parent
bc7877b58c
commit
95ccc54d05
2 changed files with 26 additions and 7 deletions
|
@ -56,14 +56,14 @@ impl Default for Settings {
|
|||
}
|
||||
|
||||
struct Stats {
|
||||
line_number: i64,
|
||||
line_number: Option<i64>,
|
||||
consecutive_empty_lines: u64,
|
||||
}
|
||||
|
||||
impl Stats {
|
||||
fn new(starting_line_number: i64) -> Self {
|
||||
Self {
|
||||
line_number: starting_line_number,
|
||||
line_number: Some(starting_line_number),
|
||||
consecutive_empty_lines: 0,
|
||||
}
|
||||
}
|
||||
|
@ -344,7 +344,7 @@ fn nl<T: Read>(reader: &mut BufReader<T>, stats: &mut Stats, settings: &Settings
|
|||
if let Some(new_style) = new_numbering_style {
|
||||
current_numbering_style = new_style;
|
||||
if settings.renumber {
|
||||
stats.line_number = settings.starting_line_number;
|
||||
stats.line_number = Some(settings.starting_line_number);
|
||||
}
|
||||
println!();
|
||||
} else {
|
||||
|
@ -364,18 +364,21 @@ fn nl<T: Read>(reader: &mut BufReader<T>, stats: &mut Stats, settings: &Settings
|
|||
};
|
||||
|
||||
if is_line_numbered {
|
||||
let Some(line_number) = stats.line_number else {
|
||||
return Err(USimpleError::new(1, "line number overflow"));
|
||||
};
|
||||
println!(
|
||||
"{}{}{}",
|
||||
settings
|
||||
.number_format
|
||||
.format(stats.line_number, settings.number_width),
|
||||
.format(line_number, settings.number_width),
|
||||
settings.number_separator,
|
||||
line
|
||||
);
|
||||
// update line number for the potential next line
|
||||
match stats.line_number.checked_add(settings.line_increment) {
|
||||
Some(new_line_number) => stats.line_number = new_line_number,
|
||||
None => return Err(USimpleError::new(1, "line number overflow")),
|
||||
match line_number.checked_add(settings.line_increment) {
|
||||
Some(new_line_number) => stats.line_number = Some(new_line_number),
|
||||
None => stats.line_number = None, // overflow
|
||||
}
|
||||
} else {
|
||||
let spaces = " ".repeat(settings.number_width + 1);
|
||||
|
|
|
@ -539,6 +539,22 @@ fn test_line_number_overflow() {
|
|||
.stderr_is("nl: line number overflow\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_line_number_no_overflow() {
|
||||
new_ucmd!()
|
||||
.arg(format!("--starting-line-number={}", i64::MAX))
|
||||
.pipe_in("a\n\\:\\:\nb")
|
||||
.succeeds()
|
||||
.stdout_is(format!("{0}\ta\n\n{0}\tb\n", i64::MAX));
|
||||
|
||||
new_ucmd!()
|
||||
.arg(format!("--starting-line-number={}", i64::MIN))
|
||||
.arg("--line-increment=-1")
|
||||
.pipe_in("a\n\\:\\:\nb")
|
||||
.succeeds()
|
||||
.stdout_is(format!("{0}\ta\n\n{0}\tb\n", i64::MIN));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_section_delimiter() {
|
||||
for arg in ["-dabc", "--section-delimiter=abc"] {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue