1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-30 12:37:49 +00:00

paste: Write to a locked stdout

This commit is contained in:
Zachary Dremann 2022-01-30 22:26:13 -05:00
parent c6ec4f8f17
commit 8905d52279

View file

@ -9,7 +9,7 @@
use clap::{crate_version, App, AppSettings, Arg}; use clap::{crate_version, App, AppSettings, Arg};
use std::fs::File; use std::fs::File;
use std::io::{stdin, BufRead, BufReader, Read}; use std::io::{stdin, BufRead, BufReader, Read, stdout, Write};
use std::path::Path; use std::path::Path;
use uucore::error::{FromIo, UResult}; use uucore::error::{FromIo, UResult};
@ -90,12 +90,15 @@ fn paste(filenames: Vec<String>, serial: bool, delimiters: &str) -> UResult<()>
let delimiters: Vec<char> = unescape(delimiters).chars().collect(); let delimiters: Vec<char> = unescape(delimiters).chars().collect();
let mut delim_count = 0; let mut delim_count = 0;
let stdout = stdout();
let mut stdout = stdout.lock();
let mut line = String::new();
if serial { if serial {
for file in &mut files { for file in &mut files {
let mut output = String::new(); let mut output = String::new();
loop { loop {
let mut line = String::new(); line.clear();
match read_line(file.as_mut(), &mut line) { match read_line(file.as_mut(), &mut line) {
Ok(0) => break, Ok(0) => break,
Ok(_) => { Ok(_) => {
@ -107,7 +110,7 @@ fn paste(filenames: Vec<String>, serial: bool, delimiters: &str) -> UResult<()>
delim_count += 1; delim_count += 1;
} }
output.pop(); output.pop();
println!("{}", output); writeln!(stdout, "{}", output)?;
} }
} else { } else {
let mut eof = vec![false; files.len()]; let mut eof = vec![false; files.len()];
@ -118,7 +121,7 @@ fn paste(filenames: Vec<String>, serial: bool, delimiters: &str) -> UResult<()>
if eof[i] { if eof[i] {
eof_count += 1; eof_count += 1;
} else { } else {
let mut line = String::new(); line.clear();
match read_line(file.as_mut(), &mut line) { match read_line(file.as_mut(), &mut line) {
Ok(0) => { Ok(0) => {
eof[i] = true; eof[i] = true;
@ -136,7 +139,7 @@ fn paste(filenames: Vec<String>, serial: bool, delimiters: &str) -> UResult<()>
} }
// Remove final delimiter // Remove final delimiter
output.pop(); output.pop();
println!("{}", output); writeln!(stdout, "{}", output)?;
delim_count = 0; delim_count = 0;
} }
} }