From 754b58b5bae975d427c1d3023646c38283a9f8d1 Mon Sep 17 00:00:00 2001 From: Toggy Smith Date: Sun, 21 Jun 2026 21:32:40 +0100 Subject: [PATCH] mktemp: clean up created file/dir if writing path to stdout fails --- src/uu/mktemp/src/mktemp.rs | 15 ++++++++++++++- src/uucore/src/lib/mods/display.rs | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/uu/mktemp/src/mktemp.rs b/src/uu/mktemp/src/mktemp.rs index 1f872714f09..33b261010f7 100644 --- a/src/uu/mktemp/src/mktemp.rs +++ b/src/uu/mktemp/src/mktemp.rs @@ -435,7 +435,20 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { } else { res }; - println_verbatim(res?).map_err_context(|| translate!("mktemp-error-failed-print")) + + let path = res?; + let res = println_verbatim(&path); + + // Delete the file/directory if output flush failed. + if res.is_err() { + if path.is_dir() { + fs::remove_dir(&path)?; + } else { + fs::remove_file(&path)?; + } + } + + res.map_err_context(|| translate!("mktemp-error-failed-print")) } pub fn uu_app() -> Command { diff --git a/src/uucore/src/lib/mods/display.rs b/src/uucore/src/lib/mods/display.rs index 165070e9a53..b79fb6d64bb 100644 --- a/src/uucore/src/lib/mods/display.rs +++ b/src/uucore/src/lib/mods/display.rs @@ -52,6 +52,7 @@ pub fn println_verbatim>(text: S) -> io::Result<()> { let mut stdout = io::stdout().lock(); stdout.write_all_os(text.as_ref())?; stdout.write_all(b"\n")?; + stdout.flush()?; Ok(()) }