[PATCH v6 01/12] lib: sbi: Fix how print gets flags
Anup Patel
anup at brainfault.org
Mon Jul 3 20:55:19 PDT 2023
On Mon, Jun 12, 2023 at 1:40 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>
> ---
> lib/sbi/sbi_console.c | 33 +++++++++++++++++++++------------
> 1 file changed, 21 insertions(+), 12 deletions(-)
>
> diff --git a/lib/sbi/sbi_console.c b/lib/sbi/sbi_console.c
> index 168dffd..6e07663 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;
> @@ -262,25 +263,33 @@ static int print(char **out, u32 *out_len, const char *format, va_list args)
>
> if (*format == '%') {
> ++format;
> - width = flags = 0;
Why do you need to split this line into two statements ?
This is a totally unrelated change.
> if (*format == '\0')
> break;
> 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 = 0;
> + 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 */
> + width = 0;
> for (; *format >= '0' && *format <= '9'; ++format) {
> width *= 10;
> width += *format - '0';
> --
> 2.39.2
>
Regards,
Anup
More information about the opensbi
mailing list