Hello all,

I have noticed that command repeat doesn't work as it should. 
CONFIG_SYS_HUSH_PARSER is disabled in my config.

Here is what happens: main_loop() expects run_command() to return -1 for 
failure, 0 or 1 for success (not repeatable or repeatable). However, 
run_command() actually returns 1 for failure, 0 for success. So if a 
command is successful, main_loop() always thinks that it is not repeatable 
...

I guess that instead of run_command(), main_loop() should call 
builtin_run_command(). Note that main_loop() calls run_command() only when 
CONFIG_SYS_HUSH_PARSER is not enabled, and in this case, run_command() 
just calls builtin_run_command() anyway -- except that it remaps the 
return code.

This issue was introduced by the patches in 2012-03-06, and in particular, 
commit 5307153236caaf2304e578c148e00a4b65cb8604, "Stop using 
builtin_run_command()".

There is one other location which relies on the -1/0/1 logic, viz., 
bedbug_main_loop(). Perhaps we need some general function which is called 
by main_loop() and  bedbug_main_loop():

        int run_command_repeatable(const char *cmd, int flag)
        {
        #ifndef CONFIG_SYS_HUSH_PARSER
                return builtin_run_command(cmd, flag);
        #else
                if (parse_string_outer(cmd,
                                FLAG_PARSE_SEMICOLON | 
FLAG_EXIT_FROM_LOOP))
                        return -1;
                return 0;
        #endif
        }

[Note: parse_string_outer() always returns 0 for success, 1 for failure.]

Any thoughts on this? I am willing to prepare a patch, but I certainly 
don't mind if this is handled by somebody else who is deeper into u-boot 
than me.

Best regards,
Thomas Betker
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to