From a9cd3f132e93987c9cf4a27de756156558b829f6 Mon Sep 17 00:00:00 2001 From: Jan Verbeek Date: Mon, 31 Mar 2025 13:25:06 +0200 Subject: [PATCH] uniq: Flush `BufWriter`, make error context GNU-like --- src/uu/uniq/src/uniq.rs | 3 ++- tests/by-util/test_uniq.rs | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/uu/uniq/src/uniq.rs b/src/uu/uniq/src/uniq.rs index 744ff6d99..444a17829 100644 --- a/src/uu/uniq/src/uniq.rs +++ b/src/uu/uniq/src/uniq.rs @@ -110,6 +110,7 @@ impl Uniq { { write_line_terminator!(writer, line_terminator)?; } + writer.flush().map_err_context(|| "write error".into())?; Ok(()) } @@ -226,7 +227,7 @@ impl Uniq { } else { writer.write_all(line) } - .map_err_context(|| "Failed to write line".to_string())?; + .map_err_context(|| "write error".to_string())?; write_line_terminator!(writer, line_terminator) } diff --git a/tests/by-util/test_uniq.rs b/tests/by-util/test_uniq.rs index b59b5e495..e1d983f99 100644 --- a/tests/by-util/test_uniq.rs +++ b/tests/by-util/test_uniq.rs @@ -1181,3 +1181,14 @@ fn test_stdin_w1_multibyte() { .succeeds() .stdout_is("à\ná\n"); } + +#[cfg(target_os = "linux")] +#[test] +fn test_failed_write_is_reported() { + new_ucmd!() + .pipe_in("hello") + .args(&["-z"]) + .set_stdout(std::fs::File::create("/dev/full").unwrap()) + .fails() + .stderr_is("uniq: write error: No space left on device\n"); +}