Skip to content

Commit

Permalink
printf: use 0 instead of 0o as octal prefix
Browse files Browse the repository at this point in the history
  • Loading branch information
tertsdiepraam committed Jan 8, 2024
1 parent 8e83b34 commit 0b408a1
Showing 1 changed file with 32 additions and 1 deletion.
33 changes: 32 additions & 1 deletion src/uucore/src/lib/features/format/num_format.rs
Expand Up @@ -141,7 +141,17 @@ impl Formatter for UnsignedInt {
let mut s = match self.variant {
UnsignedIntVariant::Decimal => format!("{x}"),
UnsignedIntVariant::Octal(Prefix::No) => format!("{x:o}"),
UnsignedIntVariant::Octal(Prefix::Yes) => format!("{x:#o}"),
UnsignedIntVariant::Octal(Prefix::Yes) => {
// The prefix that rust uses is `0o`, but GNU uses `0`.
// We also need to take into account that 0 is should not be 00
// Since this is an unsigned int, we do not need to take the minus
// sign into account.
if x != 0 {
format!("0{x:o}")

Check warning on line 150 in src/uucore/src/lib/features/format/num_format.rs

View check run for this annotation

Codecov / codecov/patch

src/uucore/src/lib/features/format/num_format.rs#L150

Added line #L150 was not covered by tests
} else {
format!("{x:o}")

Check warning on line 152 in src/uucore/src/lib/features/format/num_format.rs

View check run for this annotation

Codecov / codecov/patch

src/uucore/src/lib/features/format/num_format.rs#L152

Added line #L152 was not covered by tests
}
}
UnsignedIntVariant::Hexadecimal(Case::Lowercase, Prefix::No) => {
format!("{x:x}")
}
Expand Down Expand Up @@ -487,6 +497,27 @@ fn strip_fractional_zeroes_and_dot(s: &mut String) {
mod test {
use crate::format::num_format::{Case, ForceDecimal};

#[test]
fn unsigned_octal() {
use super::{Formatter, NumberAlignment, Prefix, UnsignedInt, UnsignedIntVariant};
let f = |x| {
let mut s = Vec::new();
UnsignedInt {
variant: UnsignedIntVariant::Octal(Prefix::Yes),
width: 0,
precision: 0,
alignment: NumberAlignment::Left,
}
.fmt(&mut s, x)
.unwrap();
String::from_utf8(s).unwrap()
};

assert_eq!(f(0), "0");
assert_eq!(f(5), "05");
assert_eq!(f(8), "010");
}

#[test]
fn decimal_float() {
use super::format_float_decimal;
Expand Down

0 comments on commit 0b408a1

Please sign in to comment.