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 {
|
struct Stats {
|
||||||
line_number: i64,
|
line_number: Option<i64>,
|
||||||
consecutive_empty_lines: u64,
|
consecutive_empty_lines: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Stats {
|
impl Stats {
|
||||||
fn new(starting_line_number: i64) -> Self {
|
fn new(starting_line_number: i64) -> Self {
|
||||||
Self {
|
Self {
|
||||||
line_number: starting_line_number,
|
line_number: Some(starting_line_number),
|
||||||
consecutive_empty_lines: 0,
|
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 {
|
if let Some(new_style) = new_numbering_style {
|
||||||
current_numbering_style = new_style;
|
current_numbering_style = new_style;
|
||||||
if settings.renumber {
|
if settings.renumber {
|
||||||
stats.line_number = settings.starting_line_number;
|
stats.line_number = Some(settings.starting_line_number);
|
||||||
}
|
}
|
||||||
println!();
|
println!();
|
||||||
} else {
|
} else {
|
||||||
|
@ -364,18 +364,21 @@ fn nl<T: Read>(reader: &mut BufReader<T>, stats: &mut Stats, settings: &Settings
|
||||||
};
|
};
|
||||||
|
|
||||||
if is_line_numbered {
|
if is_line_numbered {
|
||||||
|
let Some(line_number) = stats.line_number else {
|
||||||
|
return Err(USimpleError::new(1, "line number overflow"));
|
||||||
|
};
|
||||||
println!(
|
println!(
|
||||||
"{}{}{}",
|
"{}{}{}",
|
||||||
settings
|
settings
|
||||||
.number_format
|
.number_format
|
||||||
.format(stats.line_number, settings.number_width),
|
.format(line_number, settings.number_width),
|
||||||
settings.number_separator,
|
settings.number_separator,
|
||||||
line
|
line
|
||||||
);
|
);
|
||||||
// update line number for the potential next line
|
// update line number for the potential next line
|
||||||
match stats.line_number.checked_add(settings.line_increment) {
|
match line_number.checked_add(settings.line_increment) {
|
||||||
Some(new_line_number) => stats.line_number = new_line_number,
|
Some(new_line_number) => stats.line_number = Some(new_line_number),
|
||||||
None => return Err(USimpleError::new(1, "line number overflow")),
|
None => stats.line_number = None, // overflow
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let spaces = " ".repeat(settings.number_width + 1);
|
let spaces = " ".repeat(settings.number_width + 1);
|
||||||
|
|
|
@ -539,6 +539,22 @@ fn test_line_number_overflow() {
|
||||||
.stderr_is("nl: line number overflow\n");
|
.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]
|
#[test]
|
||||||
fn test_section_delimiter() {
|
fn test_section_delimiter() {
|
||||||
for arg in ["-dabc", "--section-delimiter=abc"] {
|
for arg in ["-dabc", "--section-delimiter=abc"] {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue