diff options
author | Simon Glass <sjg@chromium.org> | 2025-04-02 06:29:32 +1300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2025-05-02 13:40:20 -0600 |
commit | fe2d4d4cef093d24da389fda29a556b15c84829b (patch) | |
tree | 9f7af11a4eaa84befd12bd19f2d75378e9de6811 | |
parent | 4ca87fd18c1b718be423755939a6e5b1688869f5 (diff) |
console: Support a format string for stderr output
Add a console_printf_select_stderr() function so that it is not
necessary for the caller to process the format string.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
-rw-r--r-- | common/console.c | 18 | ||||
-rw-r--r-- | include/console.h | 15 |
2 files changed, 33 insertions, 0 deletions
diff --git a/common/console.c b/common/console.c index 275da2f264d..48586fd2166 100644 --- a/common/console.c +++ b/common/console.c @@ -359,6 +359,24 @@ void console_puts_select_stderr(bool serial_only, const char *s) console_puts_select(stderr, serial_only, s); } +int console_printf_select_stderr(bool serial_only, const char *fmt, ...) +{ + char buf[CONFIG_SYS_PBSIZE]; + va_list args; + int ret; + + va_start(args, fmt); + + /* For this to work, buf must be larger than anything we ever want to + * print. + */ + ret = vscnprintf(buf, sizeof(buf), fmt, args); + va_end(args); + console_puts_select_stderr(serial_only, buf); + + return ret; +} + static void console_puts(int file, const char *s) { int i; diff --git a/include/console.h b/include/console.h index 57fdb0834c1..8d0d7bb8a4c 100644 --- a/include/console.h +++ b/include/console.h @@ -170,6 +170,21 @@ int console_announce_r(void); void console_puts_select_stderr(bool serial_only, const char *s); /** + * console_printf_select_stderr() - Output a formatted string to selected devs + * + * This writes to stderr only. It is useful for outputting errors. Note that it + * uses its own buffer, separate from the print buffer, to allow printing + * messages within console/stdio code + * + * @serial_only: true to output only to serial, false to output to everything + * else + * @fmt: Printf format string, followed by format arguments + * Return: number of characters written + */ +int console_printf_select_stderr(bool serial_only, const char *fmt, ...) + __attribute__ ((format (__printf__, 2, 3))); + +/** * console_clear() - Clear the console * * Uses an ANSI sequence to clear the display, failing back to clearing the |