lib: sbi: Fix how print gets flags
authorXiang W <wxjstz@126.com>
Sun, 9 Jul 2023 16:02:21 +0000 (00:02 +0800)
committerAnup Patel <anup@brainfault.org>
Wed, 12 Jul 2023 04:09:38 +0000 (09:39 +0530)
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@126.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
lib/sbi/sbi_console.c

index 168dffd064296eac12ea785312c8db8ae836387b..d87b5c20efc303daef52e8243c36f98c5a18f530 100644 (file)
@@ -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) {