]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/cli_hush.c
Merge branch 'tx6-bugfix'
[karo-tx-uboot.git] / common / cli_hush.c
index a612bfbef51e7b806ea22c19c6288ef256b12eb0..296542f4c2d62b7094694a40c79c7d2fe9fdf545 100644 (file)
@@ -79,6 +79,7 @@
 #include <malloc.h>         /* malloc, free, realloc*/
 #include <linux/ctype.h>    /* isalpha, isdigit */
 #include <common.h>        /* readline */
+#include <bootretry.h>
 #include <cli.h>
 #include <cli_hush.h>
 #include <command.h>        /* find_cmd */
@@ -999,12 +1000,7 @@ static void get_user_input(struct in_str *i)
        int n;
        static char the_command[CONFIG_SYS_CBSIZE + 1];
 
-#ifdef CONFIG_BOOT_RETRY_TIME
-#  ifndef CONFIG_RESET_TO_RETRY
-#      error "This currently only works with CONFIG_RESET_TO_RETRY enabled"
-#  endif
-       reset_cmd_timeout();
-#endif
+       bootretry_reset_cmd_timeout();
        i->__promptme = 1;
        if (i->promptmode == 1) {
                n = cli_readline(CONFIG_SYS_PROMPT);
@@ -1844,7 +1840,7 @@ static int run_list_real(struct pipe *pi)
                if (rmode == RES_DO) {
                        if (!flag_rep) continue;
                }
-               if ((rmode == RES_DONE)) {
+               if (rmode == RES_DONE) {
                        if (flag_rep) {
                                flag_restore = 1;
                        } else {
@@ -3166,7 +3162,7 @@ static int parse_stream_outer(struct in_str *inp, int flag)
        o_string temp=NULL_O_STRING;
        int rcode;
 #ifdef __U_BOOT__
-       int code = 0;
+       int code = 1;
 #endif
        do {
                ctx.type = flag;
@@ -3174,7 +3170,8 @@ static int parse_stream_outer(struct in_str *inp, int flag)
                update_ifs_map();
                if (!(flag & FLAG_PARSE_SEMICOLON) || (flag & FLAG_REPARSING)) mapset((uchar *)";$&|", 0);
                inp->promptmode=1;
-               rcode = parse_stream(&temp, &ctx, inp, '\n');
+               rcode = parse_stream(&temp, &ctx, inp,
+                                    flag & FLAG_CONT_ON_NEWLINE ? -1 : '\n');
 #ifdef __U_BOOT__
                if (rcode == 1) flag_repeat = 0;
 #endif
@@ -3219,7 +3216,9 @@ static int parse_stream_outer(struct in_str *inp, int flag)
                        free_pipe_list(ctx.list_head,0);
                }
                b_free(&temp);
-       } while (rcode != -1 && !(flag & FLAG_EXIT_FROM_LOOP));   /* loop on syntax errors, return on EOF */
+       /* loop on syntax errors, return on EOF */
+       } while (rcode != -1 && !(flag & FLAG_EXIT_FROM_LOOP) &&
+               (inp->peek != static_peek || b_peek(inp)));
 #ifndef __U_BOOT__
        return 0;
 #else
@@ -3237,8 +3236,10 @@ int parse_string_outer(const char *s, int flag)
 #ifdef __U_BOOT__
        char *p = NULL;
        int rcode;
-       if ( !s || !*s)
+       if (!s)
                return 1;
+       if (!*s)
+               return 0;
        if (!(p = strchr(s, '\n')) || *++p) {
                p = xmalloc(strlen(s) + 2);
                strcpy(p, s);
@@ -3571,7 +3572,7 @@ static char **make_list_in(char **inp, char *name)
                p3 = insert_var_value(inp[i]);
                p1 = p3;
                while (*p1) {
-                       if ((*p1 == ' ')) {
+                       if (*p1 == ' ') {
                                p1++;
                                continue;
                        }