[PATCH v3 2/3] efi_loader: initrddump: drain input before prompt
Ilias Apalodimas
ilias.apalodimas at linaro.org
Fri Mar 25 15:59:22 CET 2022
On Tue, 22 Mar 2022 at 22:58, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> Up to now the initrddump.efi application has drained the input after
> showing the prompt. This works for humans but leads to problems when
> automating testing. If the input is drained, this should be done before
> showing the prompt.
>
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> ---
> v3:
> new patch
> ---
> lib/efi_loader/initrddump.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/lib/efi_loader/initrddump.c b/lib/efi_loader/initrddump.c
> index 25dbd635e5..4dd40eb0d3 100644
> --- a/lib/efi_loader/initrddump.c
> +++ b/lib/efi_loader/initrddump.c
> @@ -120,6 +120,14 @@ static void printx(u64 val, u32 prec)
> print(buf);
> }
>
> +/**
> + * efi_drain_input() - drain console input
> + */
> +static void efi_drain_input(void)
> +{
> + cin->reset(cin, true);
> +}
> +
> /**
> * efi_input_yn() - get answer to yes/no question
> *
> @@ -137,8 +145,6 @@ static efi_status_t efi_input_yn(void)
> efi_uintn_t index;
> efi_status_t ret;
>
> - /* Drain the console input */
> - ret = cin->reset(cin, true);
> for (;;) {
> ret = bs->wait_for_event(1, &cin->wait_for_key, &index);
> if (ret != EFI_SUCCESS)
> @@ -179,8 +185,6 @@ static efi_status_t efi_input(u16 *buffer, efi_uintn_t buffer_size)
> u16 outbuf[2] = u" ";
> efi_status_t ret;
>
> - /* Drain the console input */
> - ret = cin->reset(cin, true);
> *buffer = 0;
> for (;;) {
> ret = bs->wait_for_event(1, &cin->wait_for_key, &index);
> @@ -393,6 +397,7 @@ static efi_status_t do_save(u16 *filename)
> ret = root->open(root, &file, filename, EFI_FILE_MODE_READ, 0);
> if (ret == EFI_SUCCESS) {
> file->close(file);
> + efi_drain_input();
> print(u"Overwrite existing file (y/n)? ");
> ret = efi_input_yn();
> print(u"\r\n");
> @@ -486,6 +491,7 @@ efi_status_t EFIAPI efi_main(efi_handle_t image_handle,
> u16 *pos;
> efi_uintn_t ret;
>
> + efi_drain_input();
> print(u"=> ");
> ret = efi_input(command, sizeof(command));
> if (ret == EFI_ABORTED)
> --
> 2.34.1
>
Acked-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
More information about the U-Boot
mailing list