[PATCH v6 07/12] lib: sbi: Fix printi

Anup Patel anup at brainfault.org
Mon Jul 3 22:44:10 PDT 2023


On Mon, Jun 12, 2023 at 1:40 PM Xiang W <wxjstz at 126.com> wrote:
>
> Fix two bug:
> > printf("%#08x", 0x123); /* print 0000x123 */
> > printf("%#x", 0); /* print 0x0 */
>
> Signed-off-by: Xiang W <wxjstz at 126.com>

Looks good to me.

Reviewed-by: Anup Patel <anup at brainfault.org>

Regards,
Anup

> ---
>  lib/sbi/sbi_console.c | 36 +++++++++++++++++++++++-------------
>  1 file changed, 23 insertions(+), 13 deletions(-)
>
> diff --git a/lib/sbi/sbi_console.c b/lib/sbi/sbi_console.c
> index 047c51e..6f714f0 100644
> --- a/lib/sbi/sbi_console.c
> +++ b/lib/sbi/sbi_console.c
> @@ -227,23 +227,33 @@ static int printi(char **out, u32 *out_len, long long i,
>                 }
>         }
>
> -       if (flags & PAD_ALTERNATE) {
> -               if ((b == 16) && (letbase == 'A')) {
> -                       *--s = 'X';
> -               } else if ((b == 16) && (letbase == 'a')) {
> -                       *--s = 'x';
> -               }
> -               *--s = '0';
> -       }
> -
> -       if (sign) {
> -               if (width && (flags & PAD_ZERO)) {
> +       if (flags & PAD_ZERO) {
> +               if (sign) {
>                         printc(out, out_len, sign);
>                         ++pc;
>                         --width;
> -               } else {
> -                       *--s = sign;
>                 }
> +               if (i && (flags & PAD_ALTERNATE)) {
> +                       if (b == 16 || b == 8) {
> +                               printc(out, out_len, '0');
> +                               ++pc;
> +                               --width;
> +                       }
> +                       if (b == 16) {
> +                               printc(out, out_len, 'x' - 'a' + letbase);
> +                               ++pc;
> +                               --width;
> +                       }
> +               }
> +       } else {
> +               if (i && (flags & PAD_ALTERNATE)) {
> +                       if (b == 16)
> +                               *--s = 'x' - 'a' + letbase;
> +                       if (b == 16 || b == 8)
> +                               *--s = '0';
> +               }
> +               if (sign)
> +                       *--s = sign;
>         }
>
>         return pc + prints(out, out_len, s, width, flags);
> --
> 2.39.2
>



More information about the opensbi mailing list