mirror of
https://github.com/Fishwaldo/opensbi.git
synced 2025-03-15 19:31:32 +00:00
lib: sbi: implifying the parameters of printi
The information of sg/b/letbase can be obtained by the type character, simplifying the parameter by passing the type directly. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
parent
458fa74266
commit
05cbb6e908
1 changed files with 50 additions and 77 deletions
|
@ -184,15 +184,26 @@ static int prints(char **out, u32 *out_len, const char *string, int width,
|
|||
return pc;
|
||||
}
|
||||
|
||||
static int printi(char **out, u32 *out_len, long long i, int b, int sg,
|
||||
int width, int flags, int letbase)
|
||||
static int printi(char **out, u32 *out_len, long long i,
|
||||
int width, int flags, int type)
|
||||
{
|
||||
char *s, sign = 0, print_buf[PRINT_BUF_LEN];
|
||||
int pc = 0;
|
||||
u64 t;
|
||||
unsigned long long u = i;
|
||||
char *s, sign = 0, letbase, print_buf[PRINT_BUF_LEN];
|
||||
unsigned long long u, b, t;
|
||||
|
||||
if (sg && b == 10) {
|
||||
b = 10;
|
||||
letbase = 'a';
|
||||
if (type == 'o')
|
||||
b = 8;
|
||||
else if (type == 'x' || type == 'X' || type == 'p' || type == 'P') {
|
||||
b = 16;
|
||||
letbase &= ~0x20;
|
||||
letbase |= type & 0x20;
|
||||
}
|
||||
|
||||
u = i;
|
||||
sign = 0;
|
||||
if (type == 'i' || type == 'd') {
|
||||
if ((flags & PAD_SIGN) && i > 0)
|
||||
sign = '+';
|
||||
if (i < 0) {
|
||||
|
@ -242,9 +253,8 @@ 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;
|
||||
char type, scr[2], *tout;
|
||||
bool use_tbuf = (!out) ? true : false;
|
||||
unsigned long long tmp;
|
||||
|
||||
/*
|
||||
* The console_tbuf is protected by console_out_lock and
|
||||
|
@ -314,83 +324,46 @@ static int print(char **out, u32 *out_len, const char *format, va_list args)
|
|||
}
|
||||
if ((*format == 'd') || (*format == 'i')) {
|
||||
pc += printi(out, out_len, va_arg(args, int),
|
||||
10, 1, width, flags, '0');
|
||||
width, flags, *format);
|
||||
continue;
|
||||
}
|
||||
if (*format == 'x') {
|
||||
pc += printi(out, out_len,
|
||||
va_arg(args, unsigned int), 16, 0,
|
||||
width, flags, 'a');
|
||||
if ((*format == 'u') || (*format == 'x') || (*format == 'X')) {
|
||||
pc += printi(out, out_len, va_arg(args, unsigned int),
|
||||
width, flags, *format);
|
||||
continue;
|
||||
}
|
||||
if (*format == 'X') {
|
||||
pc += printi(out, out_len,
|
||||
va_arg(args, unsigned int), 16, 0,
|
||||
width, flags, 'A');
|
||||
if ((*format == 'p') || (*format == 'P')) {
|
||||
pc += printi(out, out_len, (uintptr_t)va_arg(args, void*),
|
||||
width, flags, *format);
|
||||
continue;
|
||||
}
|
||||
if (*format == 'u') {
|
||||
pc += printi(out, out_len,
|
||||
va_arg(args, unsigned int), 10, 0,
|
||||
width, flags, 'a');
|
||||
continue;
|
||||
}
|
||||
if (*format == 'p') {
|
||||
pc += printi(out, out_len,
|
||||
va_arg(args, unsigned long), 16, 0,
|
||||
width, flags, 'a');
|
||||
continue;
|
||||
}
|
||||
if (*format == 'P') {
|
||||
pc += printi(out, out_len,
|
||||
va_arg(args, unsigned long), 16, 0,
|
||||
width, flags, 'A');
|
||||
continue;
|
||||
}
|
||||
if (*format == 'l' && *(format + 1) == 'l') {
|
||||
tmp = va_arg(args, unsigned long long);
|
||||
if (*(format + 2) == 'u') {
|
||||
format += 2;
|
||||
pc += printi(out, out_len, tmp, 10, 0,
|
||||
width, flags, 'a');
|
||||
} else if (*(format + 2) == 'x') {
|
||||
format += 2;
|
||||
pc += printi(out, out_len, tmp, 16, 0,
|
||||
width, flags, 'a');
|
||||
} else if (*(format + 2) == 'X') {
|
||||
format += 2;
|
||||
pc += printi(out, out_len, tmp, 16, 0,
|
||||
width, flags, 'A');
|
||||
} else {
|
||||
format += 1;
|
||||
pc += printi(out, out_len, tmp, 10, 1,
|
||||
width, flags, '0');
|
||||
if (*format == 'l') {
|
||||
type = 'i';
|
||||
if (format[1] == 'l') {
|
||||
++format;
|
||||
if ((format[1] == 'u')
|
||||
|| (format[1] == 'd') || (format[1] == 'i')
|
||||
|| (format[1] == 'x') || (format[1] == 'X')) {
|
||||
++format;
|
||||
type = *format;
|
||||
}
|
||||
pc += printi(out, out_len, va_arg(args, long long),
|
||||
width, flags, type);
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
} else if (*format == 'l') {
|
||||
if (*(format + 1) == 'u') {
|
||||
format += 1;
|
||||
pc += printi(
|
||||
out, out_len,
|
||||
va_arg(args, unsigned long), 10,
|
||||
0, width, flags, 'a');
|
||||
} else if (*(format + 1) == 'x') {
|
||||
format += 1;
|
||||
pc += printi(
|
||||
out, out_len,
|
||||
va_arg(args, unsigned long), 16,
|
||||
0, width, flags, 'a');
|
||||
} else if (*(format + 1) == 'X') {
|
||||
format += 1;
|
||||
pc += printi(
|
||||
out, out_len,
|
||||
va_arg(args, unsigned long), 16,
|
||||
0, width, flags, 'A');
|
||||
} else {
|
||||
pc += printi(out, out_len,
|
||||
va_arg(args, long), 10, 1,
|
||||
width, flags, '0');
|
||||
if ((format[1] == 'u')
|
||||
|| (format[1] == 'd') || (format[1] == 'i')
|
||||
|| (format[1] == 'x') || (format[1] == 'X')) {
|
||||
++format;
|
||||
type = *format;
|
||||
}
|
||||
if ((type == 'd') || (type == 'i'))
|
||||
pc += printi(out, out_len, va_arg(args, long),
|
||||
width, flags, type);
|
||||
else
|
||||
pc += printi(out, out_len, va_arg(args, unsigned long),
|
||||
width, flags, type);
|
||||
continue;
|
||||
}
|
||||
if (*format == 'c') {
|
||||
/* char are converted to int then pushed on the stack */
|
||||
|
|
Loading…
Add table
Reference in a new issue