Add the function 'confirm_yesno' for interactive
authorPierre Aubert <p.aubert@staubli.com>
Thu, 24 Apr 2014 08:30:07 +0000 (10:30 +0200)
committerPantelis Antoniou <panto@antoniou-consulting.com>
Fri, 23 May 2014 08:53:05 +0000 (11:53 +0300)
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>
common/cmd_fuse.c
common/cmd_nand.c
common/cmd_otp.c
common/console.c
include/common.h

index 0df57dbc8071f123fedf009a1e440b20839aec1a..abab9789b0df4f80c9b723ef0ad03ad04c132732 100644 (file)
@@ -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;
index 04ab0f19be05d911541567e09b12279984715a2a..a84f7dc2d1fd301adff83aae7d8a41ad1b8acdf7 100644 (file)
@@ -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);
index 67808aa377ef15cdf3059bae08e6bfe8592ca886..593bb8c650ca18fdb5418884d3941d0191021f83 100644 (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,
                        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;
                }
        }
 
index 2dfb788885bc81609224e9d3d7d43d1735bc6d65..5453726f693270f8a028a570445d13c53e045010 100644 (file)
@@ -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
  */
index 13e5dc74e631df31d747d87d3db12326118493aa..232136c0cd1340b8c7bd941a67996ee9c58e2e1c 100644 (file)
@@ -836,7 +836,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)
  */