From aeec6b1d929a1c835d9b94c5f94c851ef97ecdc6 Mon Sep 17 00:00:00 2001 From: oech3 <79379754+oech3@users.noreply.github.com> Date: Fri, 15 May 2026 16:31:11 +0900 Subject: [PATCH] yes: use as_encoded_bytes --- src/uu/yes/locales/en-US.ftl | 1 - src/uu/yes/locales/fr-FR.ftl | 1 - src/uu/yes/src/yes.rs | 31 +++++++------------------------ 3 files changed, 7 insertions(+), 26 deletions(-) diff --git a/src/uu/yes/locales/en-US.ftl b/src/uu/yes/locales/en-US.ftl index 9daaaa820b0..77625d25521 100644 --- a/src/uu/yes/locales/en-US.ftl +++ b/src/uu/yes/locales/en-US.ftl @@ -3,4 +3,3 @@ yes-usage = yes [STRING]... # Error messages yes-error-standard-output = standard output: { $error } -yes-error-invalid-utf8 = arguments contain invalid UTF-8 diff --git a/src/uu/yes/locales/fr-FR.ftl b/src/uu/yes/locales/fr-FR.ftl index c3272b80903..a89e34bf3bc 100644 --- a/src/uu/yes/locales/fr-FR.ftl +++ b/src/uu/yes/locales/fr-FR.ftl @@ -3,4 +3,3 @@ yes-usage = yes [CHAÎNE]... # Messages d'erreur yes-error-standard-output = sortie standard : { $error } -yes-error-invalid-utf8 = les arguments contiennent de l'UTF-8 invalide diff --git a/src/uu/yes/src/yes.rs b/src/uu/yes/src/yes.rs index 5d8c4549077..f52720d395c 100644 --- a/src/uu/yes/src/yes.rs +++ b/src/uu/yes/src/yes.rs @@ -24,7 +24,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { let matches = uucore::clap_localization::handle_clap_result(uu_app(), args)?; #[allow(clippy::unwrap_used, reason = "clap provides 'y' by default")] - let buffer = args_into_buffer(matches.get_many::("STRING").unwrap())?; + let buffer = args_into_buffer(matches.get_many::("STRING").unwrap()); match exec(buffer) { Ok(()) => Ok(()), @@ -54,31 +54,14 @@ pub fn uu_app() -> Command { } /// create a buffer filled by words `i` separated by spaces. -#[allow(clippy::unnecessary_wraps, reason = "needed on some platforms")] -fn args_into_buffer<'a>(i: impl Iterator) -> UResult> { - #[cfg(unix)] - use std::os::unix::ffi::OsStrExt; - #[cfg(target_os = "wasi")] - use std::os::wasi::ffi::OsStrExt; - +fn args_into_buffer<'a>(i: impl Iterator) -> Vec { let mut buf = Vec::with_capacity(BUF_SIZE); - // On Unix (and wasi), OsStrs are just &[u8]'s underneath... - #[cfg(any(unix, target_os = "wasi"))] - for part in itertools::intersperse(i.map(|a| a.as_bytes()), b" ") { + for part in itertools::intersperse(i.map(|a| a.as_encoded_bytes()), b" ") { buf.extend_from_slice(part); } - // But, on Windows, we must hop through a String. - #[cfg(not(any(unix, target_os = "wasi")))] - for part in itertools::intersperse(i.map(|a| a.to_str()), Some(" ")) { - let bytes = part - .ok_or_else(|| USimpleError::new(1, translate!("yes-error-invalid-utf8")))? - .as_bytes(); - buf.extend_from_slice(bytes); - } buf.push(b'\n'); - - Ok(buf) + buf } /// Assumes buf holds a single output line forged from the command line arguments, copies it @@ -183,19 +166,19 @@ mod tests { fn test_args_into_buf() { { let default_args = ["y".into()]; - let v = args_into_buffer(default_args.iter()).unwrap(); + let v = args_into_buffer(default_args.iter()); assert_eq!(String::from_utf8(v).unwrap(), "y\n"); } { let args = ["foo".into()]; - let v = args_into_buffer(args.iter()).unwrap(); + let v = args_into_buffer(args.iter()); assert_eq!(String::from_utf8(v).unwrap(), "foo\n"); } { let args = ["foo".into(), "bar baz".into(), "qux".into()]; - let v = args_into_buffer(args.iter()).unwrap(); + let v = args_into_buffer(args.iter()); assert_eq!(String::from_utf8(v).unwrap(), "foo bar baz qux\n"); } }