[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