Sfoglia il codice sorgente

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
oddcoder 4 anni fa
parent
commit
ee5e2bad5a
1 ha cambiato i file con 9 aggiunte e 3 eliminazioni
  1. 9 3
      src/header/stdio/printf.rs

+ 9 - 3
src/header/stdio/printf.rs

@@ -660,16 +660,22 @@ unsafe fn inner_printf<W: Write>(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;