diff --git a/rust/src/filter/parser.rs b/rust/src/filter/parser.rs index 4e9b08e..ef0bf3d 100644 --- a/rust/src/filter/parser.rs +++ b/rust/src/filter/parser.rs @@ -375,8 +375,7 @@ fn split_num(s: &str) -> (&str, &str) { pub fn parse_size(s: &str) -> Result { let (num, unit_raw) = split_num(s); let Ok(v) = num.parse::() else { return Err(format!("bad size {s:?}")) }; - // ponytail: textutil exposes no SI getter; its formatting reveals the setting. - let bare: f64 = if crate::textutil::size(1000).ends_with("kB") { 1000.0 } else { 1024.0 }; + let bare: f64 = if crate::textutil::si() { 1000.0 } else { 1024.0 }; let m = match unit_raw.trim().to_lowercase().as_str() { "" | "b" => 1.0, "k" => bare, diff --git a/rust/src/textutil.rs b/rust/src/textutil.rs index a4c496e..a64cea0 100644 --- a/rust/src/textutil.rs +++ b/rust/src/textutil.rs @@ -162,11 +162,16 @@ pub fn set_si(v: bool) { SI.store(v, Ordering::Relaxed); } +/// Whether decimal units are selected. +pub fn si() -> bool { + SI.load(Ordering::Relaxed) +} + const IEC_UNITS: [&str; 7] = ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB"]; const SI_UNITS: [&str; 7] = ["B", "kB", "MB", "GB", "TB", "PB", "EB"]; fn scaled(n: i64) -> (f64, &'static str) { - let (base, units) = if SI.load(Ordering::Relaxed) { (1000.0, &SI_UNITS) } else { (1024.0, &IEC_UNITS) }; + let (base, units) = if si() { (1000.0, &SI_UNITS) } else { (1024.0, &IEC_UNITS) }; let neg = n < 0; let mut v = (n as f64).abs(); let mut i = 0;