Hi Pierre,

On Apr 24, 2014, at 11:30 AM, Pierre Aubert wrote:

> User's confirmation is asked in different commands. This commit adds a
> function for such confirmation.
> 
> Signed-off-by: Pierre Aubert <p.aub...@staubli.com>
> ---
> 
> V3, V4, V5: no changes
> 
> Patch added in V2
> 
> common/cmd_fuse.c |   11 ++---------
> common/cmd_nand.c |   16 +++++-----------
> common/cmd_otp.c  |   18 +++---------------
> common/console.c  |   28 +++++++++++++++++++++++++++-
> include/common.h  |    2 +-
> 5 files changed, 38 insertions(+), 37 deletions(-)
> 
> diff --git a/common/cmd_fuse.c b/common/cmd_fuse.c
> index 0df57db..abab978 100644
> --- a/common/cmd_fuse.c
> +++ b/common/cmd_fuse.c
> @@ -33,15 +33,8 @@ static int confirm_prog(void)
>                                       "what you are doing!\n"
>                       "\nReally perform this fuse programming? <y/N>\n");
> 
> -     if (getc() == 'y') {
> -             int c;
> -
> -             putc('y');
> -             c = getc();
> -             putc('\n');
> -             if (c == '\r')
> -                     return 1;
> -     }
> +     if (confirm_yesno())
> +             return 1;
> 
>       puts("Fuse programming aborted\n");
>       return 0;
> diff --git a/common/cmd_nand.c b/common/cmd_nand.c
> index 04ab0f1..a84f7dc 100644
> --- a/common/cmd_nand.c
> +++ b/common/cmd_nand.c
> @@ -605,22 +605,16 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int 
> argc, char * const argv[])
>               opts.spread = spread;
> 
>               if (scrub) {
> -                     if (!scrub_yes)
> -                             puts(scrub_warn);
> -
> -                     if (scrub_yes)
> +                     if (scrub_yes) {
>                               opts.scrub = 1;
> -                     else if (getc() == 'y') {
> -                             puts("y");
> -                             if (getc() == '\r')
> +                     } else {
> +                             puts(scrub_warn);
> +                             if (confirm_yesno()) {
>                                       opts.scrub = 1;
> -                             else {
> +                             } else {
>                                       puts("scrub aborted\n");
>                                       return 1;
>                               }
> -                     } else {
> -                             puts("scrub aborted\n");
> -                             return 1;
>                       }
>               }
>               ret = nand_erase_opts(nand, &opts);
> diff --git a/common/cmd_otp.c b/common/cmd_otp.c
> index 67808aa..593bb8c 100644
> --- a/common/cmd_otp.c
> +++ b/common/cmd_otp.c
> @@ -158,21 +158,9 @@ int do_otp(cmd_tbl_t *cmdtp, int flag, int argc, char * 
> const argv[])
>                       lowup(half + count - 1), page + (half + count - 1) / 2,
>                       half + count
>               );
> -
> -             i = 0;
> -             while (1) {
> -                     if (tstc()) {
> -                             const char exp_ans[] = "YES\r";
> -                             char c;
> -                             putc(c = getc());
> -                             if (exp_ans[i++] != c) {
> -                                     printf(" Aborting\n");
> -                                     return 1;
> -                             } else if (!exp_ans[i]) {
> -                                     puts("\n");
> -                                     break;
> -                             }
> -                     }
> +             if (!confirm_yesno()) {
> +                     printf(" Aborting\n");
> +                     return 1;
>               }
>       }
> 
> diff --git a/common/console.c b/common/console.c
> index 2dfb788..5453726 100644
> --- a/common/console.c
> +++ b/common/console.c
> @@ -537,7 +537,33 @@ int ctrlc(void)
>       }
>       return 0;
> }
> -
> +/* Reads user's confirmation.
> +   Returns 1 if user's input is "y", "Y", "yes" or "YES"
> +*/
> +int confirm_yesno(void)
> +{
> +     int i;
> +     char str_input[5];
> +
> +     /* Flush input */
> +     while (tstc())
> +             getc();
> +     i = 0;
> +     while (i < sizeof(str_input)) {
> +             str_input[i] = getc();
> +             putc(str_input[i]);
> +             if (str_input[i] == '\r')
> +                     break;
> +             i++;
> +     }
> +     putc('\n');
> +     if (strncmp(str_input, "y\r", 2) == 0 ||
> +         strncmp(str_input, "Y\r", 2) == 0 ||
> +         strncmp(str_input, "yes\r", 4) == 0 ||
> +         strncmp(str_input, "YES\r", 4) == 0)
> +             return 1;

I guess you could convert to upper/lower case and reduce the comparisons but I'd
let it pass.

Maybe follow up later with a patch just for that.

> +     return 0;
> +}
> /* pass 1 to disable ctrlc() checking, 0 to enable.
>  * returns previous state
>  */
> diff --git a/include/common.h b/include/common.h
> index baf361b..1d922b9 100644
> --- a/include/common.h
> +++ b/include/common.h
> @@ -838,7 +838,7 @@ int       ctrlc (void);
> int   had_ctrlc (void);       /* have we had a Control-C since last clear? */
> void  clear_ctrlc (void);     /* clear the Control-C condition */
> int   disable_ctrlc (int);    /* 1 to disable, 0 to enable Control-C detect */
> -
> +int confirm_yesno(void);        /*  1 if input is "y", "Y", "yes" or "YES" */
> /*
>  * STDIO based functions (can always be used)
>  */
> -- 
> 1.7.6.5
> 

This is reasonable, and I've applied it to my mmc tree,

Applied,

Thanks

-- Pantelis

Acked-by: Pantelis Antoniou <pa...@antoniou-consulting.com>

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to