lib: sbi: Add '+' flags for print
authorXiang W <wxjstz@126.com>
Sun, 9 Jul 2023 16:02:23 +0000 (00:02 +0800)
committerAnup Patel <anup@brainfault.org>
Wed, 12 Jul 2023 04:27:48 +0000 (09:57 +0530)
Adds + flags for print, prefixing positive numbers with + when this
flags is present

Signed-off-by: Xiang W <wxjstz@126.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
lib/sbi/sbi_console.c

index 03ee05a11cb7cc4c58c9b0d6c0582f1f9411743e..20fe65a3030464367ca5f77d08dff17614338005 100644 (file)
@@ -120,6 +120,7 @@ unsigned long sbi_ngets(char *str, unsigned long len)
 #define PAD_RIGHT 1
 #define PAD_ZERO 2
 #define PAD_ALTERNATE 4
+#define PAD_SIGN 8
 #define PRINT_BUF_LEN 64
 
 #define va_start(v, l) __builtin_va_start((v), l)
@@ -186,15 +187,18 @@ static int prints(char **out, u32 *out_len, const char *string, int width,
 static int printi(char **out, u32 *out_len, long long i, int b, int sg,
                  int width, int flags, int letbase)
 {
-       char print_buf[PRINT_BUF_LEN];
-       char *s;
-       int neg = 0, pc = 0;
+       char *s, sign = 0, print_buf[PRINT_BUF_LEN];
+       int pc = 0;
        u64 t;
        unsigned long long u = i;
 
-       if (sg && b == 10 && i < 0) {
-               neg = 1;
-               u   = -i;
+       if (sg && b == 10) {
+               if ((flags & PAD_SIGN) && i > 0)
+                       sign = '+';
+               if (i < 0) {
+                       sign = '-';
+                       u = -i;
+               }
        }
 
        s  = print_buf + PRINT_BUF_LEN - 1;
@@ -221,13 +225,13 @@ static int printi(char **out, u32 *out_len, long long i, int b, int sg,
                *--s = '0';
        }
 
-       if (neg) {
+       if (sign) {
                if (width && (flags & PAD_ZERO)) {
-                       printc(out, out_len, '-');
+                       printc(out, out_len, sign);
                        ++pc;
                        --width;
                } else {
-                       *--s = '-';
+                       *--s = sign;
                }
        }
 
@@ -275,6 +279,9 @@ static int print(char **out, u32 *out_len, const char *format, va_list args)
                                case '-':
                                        flags |= PAD_RIGHT;
                                        break;
+                               case '+':
+                                       flags |= PAD_SIGN;
+                                       break;
                                case '#':
                                        flags |= PAD_ALTERNATE;
                                        break;