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