Skip to content

Commit 8ec28bb

Browse files
committed
nl: improve the performances
1 parent 94b6544 commit 8ec28bb

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

src/uu/nl/locales/en-US.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ nl-help-number-width = use NUMBER columns for line numbers
3131
# Error messages
3232
nl-error-invalid-arguments = Invalid arguments supplied.
3333
nl-error-could-not-read-line = could not read line
34+
nl-error-could-not-write = could not write output
3435
nl-error-line-number-overflow = line number overflow
3536
nl-error-invalid-line-width = Invalid line number field width: ‘{ $value }’: Numerical result out of range
3637
nl-error-invalid-regex = invalid regular expression

src/uu/nl/locales/fr-FR.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ nl-help-number-width = utiliser NUMBER colonnes pour les numéros de ligne
3131
# Messages d'erreur
3232
nl-error-invalid-arguments = Arguments fournis invalides.
3333
nl-error-could-not-read-line = impossible de lire la ligne
34+
nl-error-could-not-write = impossible d'écrire la sortie
3435
nl-error-line-number-overflow = débordement du numéro de ligne
3536
nl-error-invalid-line-width = Largeur de champ de numéro de ligne invalide : ‘{ $value }’ : Résultat numérique hors limites
3637
nl-error-invalid-regex = expression régulière invalide

src/uu/nl/src/nl.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use clap::{Arg, ArgAction, Command};
77
use std::ffi::{OsStr, OsString};
88
use std::fs::File;
9-
use std::io::{BufRead, BufReader, Read, stdin};
9+
use std::io::{BufRead, BufReader, BufWriter, Read, Write, stdin, stdout};
1010
use std::path::Path;
1111
use uucore::error::{FromIo, UResult, USimpleError, set_exit_code};
1212
use uucore::{format_usage, show_error, translate};
@@ -346,6 +346,7 @@ pub fn uu_app() -> Command {
346346

347347
/// `nl` implements the main functionality for an individual buffer.
348348
fn nl<T: Read>(reader: &mut BufReader<T>, stats: &mut Stats, settings: &Settings) -> UResult<()> {
349+
let mut writer = BufWriter::new(stdout());
349350
let mut current_numbering_style = &settings.body_numbering;
350351
let mut line = Vec::new();
351352

@@ -382,7 +383,7 @@ fn nl<T: Read>(reader: &mut BufReader<T>, stats: &mut Stats, settings: &Settings
382383
if settings.renumber {
383384
stats.line_number = Some(settings.starting_line_number);
384385
}
385-
println!();
386+
writeln!(writer).map_err_context(|| translate!("nl-error-could-not-write"))?;
386387
} else {
387388
let is_line_numbered = match current_numbering_style {
388389
// consider $join_blank_lines consecutive empty lines to be one logical line
@@ -407,25 +408,31 @@ fn nl<T: Read>(reader: &mut BufReader<T>, stats: &mut Stats, settings: &Settings
407408
translate!("nl-error-line-number-overflow"),
408409
));
409410
};
410-
println!(
411+
writeln!(
412+
writer,
411413
"{}{}{}",
412414
settings
413415
.number_format
414416
.format(line_number, settings.number_width),
415417
settings.number_separator.to_string_lossy(),
416418
String::from_utf8_lossy(&line),
417-
);
419+
)
420+
.map_err_context(|| translate!("nl-error-could-not-write"))?;
418421
// update line number for the potential next line
419422
match line_number.checked_add(settings.line_increment) {
420423
Some(new_line_number) => stats.line_number = Some(new_line_number),
421424
None => stats.line_number = None, // overflow
422425
}
423426
} else {
424427
let spaces = " ".repeat(settings.number_width + 1);
425-
println!("{spaces}{}", String::from_utf8_lossy(&line));
428+
writeln!(writer, "{spaces}{}", String::from_utf8_lossy(&line))
429+
.map_err_context(|| translate!("nl-error-could-not-write"))?;
426430
}
427431
}
428432
}
433+
writer
434+
.flush()
435+
.map_err_context(|| translate!("nl-error-could-not-write"))?;
429436
Ok(())
430437
}
431438

0 commit comments

Comments
 (0)