[U-Boot] [PATCH V5 2/3] Add the function 'confirm_yesno' for interactive
Pantelis Antoniou
pantelis.antoniou at gmail.com
Fri May 23 10:52:30 CEST 2014
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.aubert at 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 <panto at antoniou-consulting.com>
More information about the U-Boot
mailing list