1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 03:27:44 +00:00

fold: Handle input with newlines (#1680)

The read_line function appends to the given buffer which is never
cleared. This leads to lines being duplicated.
This commit is contained in:
jaggededgedjustice 2021-01-05 08:10:01 +00:00 committed by GitHub
parent 61577e34fa
commit 18c39daed7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 8 deletions

View file

@ -97,9 +97,9 @@ fn fold(filenames: Vec<String>, bytes: bool, spaces: bool, width: usize) {
}
#[inline]
fn fold_file<T: Read>(mut file: BufReader<T>, bytes: bool, spaces: bool, width: usize) {
let mut line = String::new();
while safe_unwrap!(file.read_line(&mut line)) > 0 {
fn fold_file<T: Read>(file: BufReader<T>, bytes: bool, spaces: bool, width: usize) {
for line_result in file.lines() {
let mut line = safe_unwrap!(line_result);
if bytes {
let len = line.len();
let mut i = 0;
@ -194,11 +194,7 @@ fn fold_file<T: Read>(mut file: BufReader<T>, bytes: bool, spaces: bool, width:
output.push(ch);
}
if count > 0 {
if newline {
println!("{}", output);
} else {
print!("{}", output);
}
println!("{}", output);
}
}
}

View file

@ -23,3 +23,11 @@ fn test_40_column_word_boundary() {
.run()
.stdout_is_fixture("lorem_ipsum_40_column_word.expected");
}
#[test]
fn test_default_warp_with_newlines() {
new_ucmd!()
.arg("lorem_ipsum_new_line.txt")
.run()
.stdout_is_fixture("lorem_ipsum_new_line_80_column.expected");
}

View file

@ -0,0 +1,2 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc interdum suscipit sem vel ornare. Proin euismod, justo sed mollis dictum, eros urna ultricies augue, eu pharetra mi ex id ante. Duis convallis porttitor aliquam. Nunc vitae tincidunt ex. Suspendisse iaculis ligula ac diam consectetur lacinia. Donec vel velit dui. Etiam fringilla, dolor quis tempor vehicula, lacus turpis bibendum velit, et pellentesque elit odio a magna.
Cras vulputate tortor non libero vehicula euismod. Aliquam tincidunt nisl eget enim cursus, viverra sagittis magna commodo. Cras rhoncus egestas leo nec blandit. Suspendisse potenti. Etiam ullamcorper leo vel lacus vestibulum, cursus semper eros efficitur. In hac habitasse platea dictumst. Phasellus scelerisque vehicula fringilla.

View file

@ -0,0 +1,11 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc interdum suscipit
sem vel ornare. Proin euismod, justo sed mollis dictum, eros urna ultricies augu
e, eu pharetra mi ex id ante. Duis convallis porttitor aliquam. Nunc vitae tinci
dunt ex. Suspendisse iaculis ligula ac diam consectetur lacinia. Donec vel velit
dui. Etiam fringilla, dolor quis tempor vehicula, lacus turpis bibendum velit,
et pellentesque elit odio a magna.
Cras vulputate tortor non libero vehicula euismod. Aliquam tincidunt nisl eget e
nim cursus, viverra sagittis magna commodo. Cras rhoncus egestas leo nec blandit
. Suspendisse potenti. Etiam ullamcorper leo vel lacus vestibulum, cursus semper
eros efficitur. In hac habitasse platea dictumst. Phasellus scelerisque vehicul
a fringilla.