From ee5e2bad5ac24bbb87439b6b3b66a0dd812197b6 Mon Sep 17 00:00:00 2001 From: oddcoder Date: Sat, 23 May 2020 14:59:12 +0200 Subject: [PATCH] Support negative padding size in printf and friends as it seams you can do something like printf ("A%*s%s/\n", -5, "B", "CC"); and it will print the padding to the left --- src/header/stdio/printf.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/header/stdio/printf.rs b/src/header/stdio/printf.rs index 727de95264..4c5550bebe 100644 --- a/src/header/stdio/printf.rs +++ b/src/header/stdio/printf.rs @@ -660,16 +660,22 @@ unsafe fn inner_printf(w: W, format: *const c_char, mut ap: VaList) -> }; let alternate = arg.alternate; let zero = arg.zero; - let left = arg.left; + let mut left = arg.left; let sign_reserve = arg.sign_reserve; let sign_always = arg.sign_always; let min_width = arg.min_width.resolve(&mut varargs, &mut ap); let precision = arg.precision.map(|n| n.resolve(&mut varargs, &mut ap)); let pad_zero = arg.pad_zero.resolve(&mut varargs, &mut ap); - let pad_space = match pad_zero { - 0 => min_width, + let signed_space = match pad_zero { + 0 => min_width as isize, _ => 0, }; + let pad_space = if signed_space < 0 { + left = true; + -signed_space as usize + } else { + signed_space as usize + }; let intkind = arg.intkind; let fmt = arg.fmt; let fmtkind = arg.fmtkind;