diff --git a/src/uu/paste/src/paste.rs b/src/uu/paste/src/paste.rs index 0792da458..5208f1b5a 100644 --- a/src/uu/paste/src/paste.rs +++ b/src/uu/paste/src/paste.rs @@ -10,7 +10,6 @@ use clap::{crate_version, App, AppSettings, Arg}; use std::fs::File; use std::io::{stdin, BufRead, BufReader, Read}; -use std::iter::repeat; use std::path::Path; use uucore::error::{FromIo, UResult}; @@ -110,10 +109,11 @@ fn paste(filenames: Vec, serial: bool, delimiters: &str) -> UResult<()> } delim_count += 1; } - println!("{}", &output[..output.len() - 1]); + output.pop(); + println!("{}", output); } } else { - let mut eof: Vec = repeat(false).take(files.len()).collect(); + let mut eof = vec![false; files.len()]; loop { let mut output = String::new(); let mut eof_count = 0; @@ -137,7 +137,9 @@ fn paste(filenames: Vec, serial: bool, delimiters: &str) -> UResult<()> if files.len() == eof_count { break; } - println!("{}", &output[..output.len() - 1]); + // Remove final delimiter + output.pop(); + println!("{}", output); delim_count = 0; } } diff --git a/tests/by-util/test_paste.rs b/tests/by-util/test_paste.rs index 1afe84be8..5363e6962 100644 --- a/tests/by-util/test_paste.rs +++ b/tests/by-util/test_paste.rs @@ -60,6 +60,18 @@ static EXAMPLE_DATA: &[TestData] = &[ ins: &["1\na\n", "2\nb\n"], out: "1 2\na b\n", }, + TestData { + name: "multibyte-delim", + args: &["-d", "πŸ’£"], + ins: &["1\na\n", "2\nb\n"], + out: "1πŸ’£2\naπŸ’£b\n", + }, + TestData { + name: "multibyte-delim-serial", + args: &["-d", "πŸ’£", "-s"], + ins: &["1\na\n", "2\nb\n"], + out: "1πŸ’£a\n2πŸ’£b\n", + }, ]; #[test]