Add the function 'confirm_yesno' for interactive

User's confirmation is asked in different commands. This commit adds a
function for such confirmation.

Acked-by: Pantelis Antoniou <panto@antoniou-consulting.com>
Signed-off-by: Pierre Aubert <p.aubert@staubli.com>
This commit is contained in:
Pierre Aubert 2014-04-24 10:30:07 +02:00 committed by Pantelis Antoniou
parent 91fdabc67a
commit a5dffa4b67
5 changed files with 37 additions and 36 deletions

View File

@ -33,15 +33,8 @@ static int confirm_prog(void)
"what you are doing!\n" "what you are doing!\n"
"\nReally perform this fuse programming? <y/N>\n"); "\nReally perform this fuse programming? <y/N>\n");
if (getc() == 'y') { if (confirm_yesno())
int c; return 1;
putc('y');
c = getc();
putc('\n');
if (c == '\r')
return 1;
}
puts("Fuse programming aborted\n"); puts("Fuse programming aborted\n");
return 0; return 0;

View File

@ -605,22 +605,16 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
opts.spread = spread; opts.spread = spread;
if (scrub) { if (scrub) {
if (!scrub_yes) if (scrub_yes) {
puts(scrub_warn);
if (scrub_yes)
opts.scrub = 1; opts.scrub = 1;
else if (getc() == 'y') { } else {
puts("y"); puts(scrub_warn);
if (getc() == '\r') if (confirm_yesno()) {
opts.scrub = 1; opts.scrub = 1;
else { } else {
puts("scrub aborted\n"); puts("scrub aborted\n");
return 1; return 1;
} }
} else {
puts("scrub aborted\n");
return 1;
} }
} }
ret = nand_erase_opts(nand, &opts); ret = nand_erase_opts(nand, &opts);

View File

@ -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, lowup(half + count - 1), page + (half + count - 1) / 2,
half + count half + count
); );
if (!confirm_yesno()) {
i = 0; printf(" Aborting\n");
while (1) { return 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;
}
}
} }
} }

View File

@ -537,7 +537,33 @@ int ctrlc(void)
} }
return 0; 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. /* pass 1 to disable ctrlc() checking, 0 to enable.
* returns previous state * returns previous state
*/ */

View File

@ -836,7 +836,7 @@ int ctrlc (void);
int had_ctrlc (void); /* have we had a Control-C since last clear? */ int had_ctrlc (void); /* have we had a Control-C since last clear? */
void clear_ctrlc (void); /* clear the Control-C condition */ void clear_ctrlc (void); /* clear the Control-C condition */
int disable_ctrlc (int); /* 1 to disable, 0 to enable Control-C detect */ 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) * STDIO based functions (can always be used)
*/ */