diff --git a/src/uucore/src/lib/features/format/argument.rs b/src/uucore/src/lib/features/format/argument.rs index db18cf518..6f66230cb 100644 --- a/src/uucore/src/lib/features/format/argument.rs +++ b/src/uucore/src/lib/features/format/argument.rs @@ -41,14 +41,7 @@ impl<'a, T: Iterator> ArgumentIter<'a> for T { match next { FormatArgument::Char(c) => *c, FormatArgument::Unparsed(s) => { - let mut chars = s.chars(); - let Some(c) = chars.next() else { - return '\0'; - }; - let None = chars.next() else { - return '\0'; - }; - c + s.chars().next().unwrap_or('\0') } _ => '\0', } diff --git a/tests/by-util/test_printf.rs b/tests/by-util/test_printf.rs index dfd131590..c106e5512 100644 --- a/tests/by-util/test_printf.rs +++ b/tests/by-util/test_printf.rs @@ -162,6 +162,14 @@ fn sub_char() { .stdout_only("the letter A"); } +#[test] +fn sub_char_from_string() { + new_ucmd!() + .args(&["%c%c%c", "five", "%", "oval"]) + .succeeds() + .stdout_only("f%o"); +} + #[test] fn sub_num_int() { new_ucmd!()