console: Move poor-man's atoi() into string.h
vtxprintf.c seems to have been written before string.h was as fleshed out as it is today -- this patch removes some custom implementation of stuff we now have globally. It also makes the skip_atoi() function globally available, because I need it somewhere else, and while we maybe don't want a huge fully-featured string parsing library in coreboot, being able to parse an integer is occasionally useful. Change-Id: Iecb2b970aecfc768540d2bf8b3023445f54853a4 Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/32858 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Alex Thiessen <alex.thiessen.de+coreboot@gmail.com>
This commit is contained in:
parent
2b6da7f326
commit
66c77c2dc9
|
@ -24,20 +24,6 @@
|
||||||
#define SUPPORT_64BIT_INTS
|
#define SUPPORT_64BIT_INTS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* haha, don't need ctype.c */
|
|
||||||
#define isdigit(c) ((c) >= '0' && (c) <= '9')
|
|
||||||
#define is_digit isdigit
|
|
||||||
#define isxdigit(c) (((c) >= '0' && (c) <= '9') || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
|
|
||||||
|
|
||||||
static int skip_atoi(const char **s)
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
while (is_digit(**s))
|
|
||||||
i = i*10 + *((*s)++) - '0';
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define ZEROPAD 1 /* pad with zero */
|
#define ZEROPAD 1 /* pad with zero */
|
||||||
#define SIGN 2 /* unsigned/signed long */
|
#define SIGN 2 /* unsigned/signed long */
|
||||||
#define PLUS 4 /* show plus */
|
#define PLUS 4 /* show plus */
|
||||||
|
@ -175,8 +161,8 @@ repeat:
|
||||||
|
|
||||||
/* get field width */
|
/* get field width */
|
||||||
field_width = -1;
|
field_width = -1;
|
||||||
if (is_digit(*fmt)) {
|
if (isdigit(*fmt)) {
|
||||||
field_width = skip_atoi(&fmt);
|
field_width = skip_atoi((char **)&fmt);
|
||||||
} else if (*fmt == '*') {
|
} else if (*fmt == '*') {
|
||||||
++fmt;
|
++fmt;
|
||||||
/* it's the next argument */
|
/* it's the next argument */
|
||||||
|
@ -191,8 +177,8 @@ repeat:
|
||||||
precision = -1;
|
precision = -1;
|
||||||
if (*fmt == '.') {
|
if (*fmt == '.') {
|
||||||
++fmt;
|
++fmt;
|
||||||
if (is_digit(*fmt)) {
|
if (isdigit(*fmt)) {
|
||||||
precision = skip_atoi(&fmt);
|
precision = skip_atoi((char **)&fmt);
|
||||||
} else if (*fmt == '*') {
|
} else if (*fmt == '*') {
|
||||||
++fmt;
|
++fmt;
|
||||||
/* it's the next argument */
|
/* it's the next argument */
|
||||||
|
|
|
@ -178,4 +178,19 @@ static inline int tolower(int c)
|
||||||
c -= 'A'-'a';
|
c -= 'A'-'a';
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parses an unsigned integer and moves the input pointer forward to the first
|
||||||
|
* character that's not a valid digit. s and *s must not be NULL. Result
|
||||||
|
* undefined if it overruns the return type size.
|
||||||
|
*/
|
||||||
|
static inline unsigned int skip_atoi(char **s)
|
||||||
|
{
|
||||||
|
unsigned int i = 0;
|
||||||
|
|
||||||
|
while (isdigit(**s))
|
||||||
|
i = i*10 + *((*s)++) - '0';
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* STRING_H */
|
#endif /* STRING_H */
|
||||||
|
|
Loading…
Reference in New Issue