From ee0e2c042bf93062727cf20356d4ebbfaa018291 Mon Sep 17 00:00:00 2001 From: Terts Diepraam Date: Thu, 9 Nov 2023 16:05:38 +0100 Subject: [PATCH] dd: use num_format::Float directly instead of printf --- src/uu/dd/src/progress.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/uu/dd/src/progress.rs b/src/uu/dd/src/progress.rs index 1d9b7247d..269ae5df4 100644 --- a/src/uu/dd/src/progress.rs +++ b/src/uu/dd/src/progress.rs @@ -13,8 +13,10 @@ use std::io::Write; use std::sync::mpsc; use std::time::Duration; -use uucore::format::sprintf; -use uucore::{error::UResult, format::FormatArgument}; +use uucore::{ + error::UResult, + format::num_format::{FloatVariant, Formatter}, +}; use crate::numbers::{to_magnitude_and_suffix, SuffixType}; @@ -152,8 +154,13 @@ impl ProgUpdate { let (carriage_return, newline) = if rewrite { ("\r", "") } else { ("", "\n") }; // The duration should be formatted as in `printf %g`. - // TODO: remove unwrap and make FormatError implement UError - let duration_str = sprintf("%g", &[FormatArgument::Float(duration)])?; + let mut duration_str = Vec::new(); + uucore::format::num_format::Float { + variant: FloatVariant::Shortest, + ..Default::default() + } + .fmt(&mut duration_str, duration)?; + // We assume that printf will output valid UTF-8 let duration_str = std::str::from_utf8(&duration_str).unwrap(); // If the number of bytes written is sufficiently large, then