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

tail: Flush BufWriter

This commit is contained in:
Jan Verbeek 2025-03-31 13:19:55 +02:00
parent 11ef1522ca
commit cf50952325
4 changed files with 17 additions and 7 deletions

View file

@ -319,7 +319,7 @@ impl BytesChunkBuffer {
Ok(())
}
pub fn print(&self, mut writer: impl Write) -> UResult<()> {
pub fn print(&self, writer: &mut impl Write) -> UResult<()> {
for chunk in &self.chunks {
writer.write_all(chunk.get_buffer())?;
}

View file

@ -12,7 +12,7 @@ use crate::text;
use std::collections::HashMap;
use std::collections::hash_map::Keys;
use std::fs::{File, Metadata};
use std::io::{BufRead, BufReader, BufWriter, stdout};
use std::io::{BufRead, BufReader, BufWriter, Write, stdout};
use std::path::{Path, PathBuf};
use uucore::error::UResult;
@ -146,9 +146,9 @@ impl FileHandling {
self.header_printer.print(display_name.as_str());
}
let stdout = stdout();
let writer = BufWriter::new(stdout.lock());
chunks.print(writer)?;
let mut writer = BufWriter::new(stdout().lock());
chunks.print(&mut writer)?;
writer.flush()?;
self.last.replace(path.to_owned());
self.update_metadata(path, None);

View file

@ -399,8 +399,7 @@ fn bounded_tail(file: &mut File, settings: &Settings) {
}
fn unbounded_tail<T: Read>(reader: &mut BufReader<T>, settings: &Settings) -> UResult<()> {
let stdout = stdout();
let mut writer = BufWriter::new(stdout.lock());
let mut writer = BufWriter::new(stdout().lock());
match &settings.mode {
FilterMode::Lines(Signum::Negative(count), sep) => {
let mut chunks = chunks::LinesChunkBuffer::new(*sep, *count);
@ -459,6 +458,7 @@ fn unbounded_tail<T: Read>(reader: &mut BufReader<T>, settings: &Settings) -> UR
}
_ => {}
}
writer.flush()?;
Ok(())
}

View file

@ -4847,3 +4847,13 @@ fn test_child_when_run_with_stderr_to_stdout() {
.fails()
.stdout_only(expected_stdout);
}
#[cfg(target_os = "linux")]
#[test]
fn test_failed_write_is_reported() {
new_ucmd!()
.pipe_in("hello")
.set_stdout(std::fs::File::create("/dev/full").unwrap())
.fails()
.stderr_is("tail: No space left on device\n");
}