From: Gregor Herburger Date: Mon, 13 Apr 2026 15:24:53 +0000 (+0200) Subject: console: add console_flush_stdin() X-Git-Tag: v2026.07-rc1~23 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=2c8fdd7aea1d3c6c380ea5b5080147dc7fe9c38f;p=thirdparty%2Fu-boot.git console: add console_flush_stdin() Add a common helper console_flush_stdin() to drain all pending characters from stdin. This consolidates the open-coded while (tstc()) getchar() pattern that appeared in multiple places across the tree. Signed-off-by: Gregor Herburger Reviewed-by: Alexander Sverdlin Reviewed-by: Quentin Schulz Reviewed-by: Simon Glass --- diff --git a/cmd/conitrace.c b/cmd/conitrace.c index 6cc113328eb..aef094e03df 100644 --- a/cmd/conitrace.c +++ b/cmd/conitrace.c @@ -6,6 +6,7 @@ * Copyright (c) 2018, Heinrich Schuchardt */ #include +#include #include static int do_conitrace(struct cmd_tbl *cmdtp, int flag, int argc, @@ -17,8 +18,7 @@ static int do_conitrace(struct cmd_tbl *cmdtp, int flag, int argc, printf("To terminate type 'x'\n"); /* Empty input buffer */ - while (tstc()) - getchar(); + console_flush_stdin(); for (;;) { int c = getchar(); diff --git a/cmd/eficonfig.c b/cmd/eficonfig.c index d8d946c87ac..60c39bc3a99 100644 --- a/cmd/eficonfig.c +++ b/cmd/eficonfig.c @@ -6,8 +6,9 @@ */ #include -#include #include +#include +#include #include #include #include @@ -167,8 +168,7 @@ static void eficonfig_menu_adjust(struct efimenu *efi_menu, bool add) void eficonfig_print_msg(char *msg) { /* Flush input */ - while (tstc()) - getchar(); + console_flush_stdin(); printf(ANSI_CURSOR_HIDE ANSI_CLEAR_CONSOLE diff --git a/cmd/eficonfig_sbkey.c b/cmd/eficonfig_sbkey.c index b3325a540f9..a6c5416d3a5 100644 --- a/cmd/eficonfig_sbkey.c +++ b/cmd/eficonfig_sbkey.c @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -288,8 +289,7 @@ static efi_status_t eficonfig_process_show_siglist(void *data) } } - while (tstc()) - getchar(); + console_flush_stdin(); printf("\n\n Press any key to continue"); getchar(); diff --git a/common/autoboot.c b/common/autoboot.c index 1783ef92c94..4b80ddb5b28 100644 --- a/common/autoboot.c +++ b/common/autoboot.c @@ -315,15 +315,6 @@ static int passwd_abort_key(uint64_t etime) return abort; } -/** - * flush_stdin() - drops all pending characters from stdin - */ -static void flush_stdin(void) -{ - while (tstc()) - (void)getchar(); -} - /** * fallback_to_sha256() - check whether we should fall back to sha256 * password checking @@ -354,7 +345,7 @@ static int abortboot_key_sequence(int bootdelay) uint64_t etime = endtick(bootdelay); if (IS_ENABLED(CONFIG_AUTOBOOT_FLUSH_STDIN)) - flush_stdin(); + console_flush_stdin(); # ifdef CONFIG_AUTOBOOT_PROMPT /* * CONFIG_AUTOBOOT_PROMPT includes the %d for all boards. diff --git a/common/console.c b/common/console.c index 22e554cf203..54d1249422d 100644 --- a/common/console.c +++ b/common/console.c @@ -643,6 +643,15 @@ int tstc(void) return serial_tstc(); } +/** + * console_flush_stdin() - drops all pending characters from stdin + */ +void console_flush_stdin(void) +{ + while (tstc()) + (void)getchar(); +} + #define PRE_CONSOLE_FLUSHPOINT1_SERIAL 0 #define PRE_CONSOLE_FLUSHPOINT2_EVERYTHING_BUT_SERIAL 1 @@ -914,8 +923,7 @@ int confirm_yesno(void) char str_input[5]; /* Flush input */ - while (tstc()) - getchar(); + console_flush_stdin(); i = 0; while (i < sizeof(str_input)) { str_input[i] = getchar(); diff --git a/include/console.h b/include/console.h index 8d0d7bb8a4c..01a04f28f31 100644 --- a/include/console.h +++ b/include/console.h @@ -202,6 +202,11 @@ int console_clear(void); */ int console_remove_by_name(const char *name); +/** + * console_flush_stdin() - drops all pending characters from stdin + */ +void console_flush_stdin(void); + /* * CONSOLE multiplexing. */ diff --git a/lib/efi_loader/efi_console.c b/lib/efi_loader/efi_console.c index a798d5604a3..8d076058280 100644 --- a/lib/efi_loader/efi_console.c +++ b/lib/efi_loader/efi_console.c @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -299,8 +300,7 @@ static int query_console_serial(int *rows, int *cols) int n[2]; /* Empty input buffer */ - while (tstc()) - getchar(); + console_flush_stdin(); /* * Not all terminals understand CSI [18t for querying the console size. @@ -960,8 +960,7 @@ static void efi_cin_check(void) */ static void efi_cin_empty_buffer(void) { - while (tstc()) - getchar(); + console_flush_stdin(); key_available = false; }