Message ID | 1398328208-4489-3-git-send-email-p.aubert@staubli.com |
---|---|
State | Accepted |
Delegated to: | Pantelis Antoniou |
Headers | show |
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@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@antoniou-consulting.com>
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; + 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) */
User's confirmation is asked in different commands. This commit adds a function for such confirmation. Signed-off-by: Pierre Aubert <p.aubert@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(-)