aboutsummaryrefslogtreecommitdiff
path: root/lib/vsprintf.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2023-01-17 10:47:30 -0700
committerTom Rini <trini@konsulko.com>2023-01-23 18:11:39 -0500
commit7f331941321d47ea4aa732b1174a57c273728cf5 (patch)
tree1ef0af8a93e0d8e359ba9e2920b878615ac7bac4 /lib/vsprintf.c
parent057c567fb5075b39f5ac040c7259675f472c3304 (diff)
downloadu-boot-7f331941321d47ea4aa732b1174a57c273728cf5.zip
u-boot-7f331941321d47ea4aa732b1174a57c273728cf5.tar.gz
u-boot-7f331941321d47ea4aa732b1174a57c273728cf5.tar.bz2
lib: Support printing an error string
It is often useful to show an error code to give the user a clue as to what went wrong. When error strings are compiled into U-Boot it is possible to show a message as well. But at present it is not very convenient, since code must check if the error strings are present, then obtain the error string and use it in a printf() string. Add a %dE option which shows an error code along with an error string, if available. This makes it easy to show one or both. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'lib/vsprintf.c')
-rw-r--r--lib/vsprintf.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 530d808..8de3882 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -145,6 +145,7 @@ static noinline char *put_dec(char *buf, uint64_t num)
#define LEFT 16 /* left justified */
#define SMALL 32 /* Must be 32 == 0x20 */
#define SPECIAL 64 /* 0x */
+#define ERRSTR 128 /* %dE showing error string if enabled */
/*
* Macro to add a new character to our output string, but only if it will
@@ -678,6 +679,8 @@ repeat:
break;
case 'd':
+ if (fmt[1] == 'E')
+ flags |= ERRSTR;
case 'i':
flags |= SIGN;
case 'u':
@@ -712,6 +715,15 @@ repeat:
}
str = number(str, end, num, base, field_width, precision,
flags);
+ if (IS_ENABLED(CONFIG_ERRNO_STR) && (flags & ERRSTR)) {
+ const char *p;
+
+ ADDCH(str, ':');
+ ADDCH(str, ' ');
+ for (p = errno_str(num); *p; p++)
+ ADDCH(str, *p);
+ fmt++;
+ }
}
if (size > 0) {