
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");
} ret = nand_erase_opts(nand, &opts);return 1; }
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