command: Fix confusing syntax error message
authorAndreas Fritiofson <andreas.fritiofson@gmail.com>
Tue, 9 Sep 2014 22:13:09 +0000 (00:13 +0200)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 22 Sep 2014 19:40:38 +0000 (19:40 +0000)
If the user executes a command with an invalid subcommand, the error
message is extremely unhelpful:

> flash write test.elf
flash write test.elf: command requires more arguments

This is because any command line that starts with a valid command group is
classified as a group, triggering ocd_bouncer to print the confusing
message.

Fix by requiring that to be a command group, the command line must not
contain any unknown tokens after the last valid (sub-)command group. That
is OK because command groups don't have handlers defined and thus can't
take any parameters.

Also fix the error message for "unknown" type to be similar to the error
message that is printed (by Jim) for non-existent primary commands.

Change-Id: I26950349f0909fd3961c4f9ab9b198c221cea9fc
Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/2285
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/helper/command.c
src/helper/startup.tcl

index 137ac7ee6782fcbbb3042bbb42990c0bb43baea5..c29f1130ca6e5824771b28b746efc4f4ec0c62f9 100644 (file)
@@ -1070,8 +1070,10 @@ static int jim_command_type(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
                Jim_SetResultString(interp, "native", -1);
        else if (c->handler)
                Jim_SetResultString(interp, "simple", -1);
-       else
+       else if (remaining == 0)
                Jim_SetResultString(interp, "group", -1);
+       else
+               Jim_SetResultString(interp, "unknown", -1);
 
        return JIM_OK;
 }
index a7c0d5844f8523031e0c612d70c9c59ec990364d..926d26b637fb3072ca6481c278a106f12fb3fef7 100644 (file)
@@ -30,7 +30,7 @@ proc ocd_bouncer {name args} {
                set errmsg [format "%s: command requires more arguments" \
                        [concat $name " " $args]]
        } else {
-               set errmsg [format "Unknown command type: %s" $type]
+               set errmsg [format "invalid subcommand \"%s\"" $args]
        }}}
        return -code error $errmsg
 }