[PATCH v7 01/11] lib: sbi: Fix how print gets flags

Anup Patel anup at brainfault.org
Tue Jul 4 08:52:01 PDT 2023


On Tue, Jul 4, 2023 at 6:42 PM Xiang W <wxjstz at 126.com> wrote:
>
> The flags for print should be able to appear in any order. The
> previous code required the order to be fixed.
>
> 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 | 30 +++++++++++++++++++-----------
>  1 file changed, 19 insertions(+), 11 deletions(-)
>
> diff --git a/lib/sbi/sbi_console.c b/lib/sbi/sbi_console.c
> index 168dffd..d87b5c2 100644
> --- a/lib/sbi/sbi_console.c
> +++ b/lib/sbi/sbi_console.c
> @@ -236,6 +236,7 @@ static int printi(char **out, u32 *out_len, long long i, int b, int sg,
>
>  static int print(char **out, u32 *out_len, const char *format, va_list args)
>  {
> +       bool flags_done;
>         int width, flags, pc = 0;
>         char scr[2], *tout;
>         bool use_tbuf = (!out) ? true : false;
> @@ -268,17 +269,24 @@ static int print(char **out, u32 *out_len, const char *format, va_list args)
>                         if (*format == '%')
>                                 goto literal;
>                         /* Get flags */
> -                       if (*format == '-') {
> -                               ++format;
> -                               flags = PAD_RIGHT;
> -                       }
> -                       if (*format == '#') {
> -                               ++format;
> -                               flags |= PAD_ALTERNATE;
> -                       }
> -                       while (*format == '0') {
> -                               ++format;
> -                               flags |= PAD_ZERO;
> +                       flags_done = false;
> +                       while (!flags_done) {
> +                               switch (*format) {
> +                               case '-':
> +                                       flags |= PAD_RIGHT;
> +                                       break;
> +                               case '#':
> +                                       flags |= PAD_ALTERNATE;
> +                                       break;
> +                               case '0':
> +                                       flags |= PAD_ZERO;
> +                                       break;
> +                               default:
> +                                       flags_done = true;
> +                                       break;
> +                               }
> +                               if (!flags_done)
> +                                       ++format;
>                         }
>                         /* Get width */
>                         for (; *format >= '0' && *format <= '9'; ++format) {
> --
> 2.40.1
>



More information about the opensbi mailing list