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:
parent
11ef1522ca
commit
cf50952325
4 changed files with 17 additions and 7 deletions
|
@ -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())?;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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(())
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue