[PATCH 20/71] lib: Support printing an error string

Simon Glass sjg at chromium.org
Wed Dec 7 09:50:46 CET 2022


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 at chromium.org>
---

 lib/vsprintf.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 530d8088c7f..8de3882fb6c 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) {
-- 
2.39.0.rc0.267.gcb52ba06e7-goog



More information about the U-Boot mailing list