mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37: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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print(&self, mut writer: impl Write) -> UResult<()> {
|
pub fn print(&self, writer: &mut impl Write) -> UResult<()> {
|
||||||
for chunk in &self.chunks {
|
for chunk in &self.chunks {
|
||||||
writer.write_all(chunk.get_buffer())?;
|
writer.write_all(chunk.get_buffer())?;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ use crate::text;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::collections::hash_map::Keys;
|
use std::collections::hash_map::Keys;
|
||||||
use std::fs::{File, Metadata};
|
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 std::path::{Path, PathBuf};
|
||||||
use uucore::error::UResult;
|
use uucore::error::UResult;
|
||||||
|
|
||||||
|
@ -146,9 +146,9 @@ impl FileHandling {
|
||||||
self.header_printer.print(display_name.as_str());
|
self.header_printer.print(display_name.as_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
let stdout = stdout();
|
let mut writer = BufWriter::new(stdout().lock());
|
||||||
let writer = BufWriter::new(stdout.lock());
|
chunks.print(&mut writer)?;
|
||||||
chunks.print(writer)?;
|
writer.flush()?;
|
||||||
|
|
||||||
self.last.replace(path.to_owned());
|
self.last.replace(path.to_owned());
|
||||||
self.update_metadata(path, None);
|
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<()> {
|
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 {
|
match &settings.mode {
|
||||||
FilterMode::Lines(Signum::Negative(count), sep) => {
|
FilterMode::Lines(Signum::Negative(count), sep) => {
|
||||||
let mut chunks = chunks::LinesChunkBuffer::new(*sep, *count);
|
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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4847,3 +4847,13 @@ fn test_child_when_run_with_stderr_to_stdout() {
|
||||||
.fails()
|
.fails()
|
||||||
.stdout_only(expected_stdout);
|
.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