From 35b3c95299a97c05078f7dd662d66c89a356869d Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 4 Apr 2008 13:47:38 +0000 Subject: - reverted some of the changes that possibly broke arm926ejs. Waiting for a bit more info before I can tell with confidence whether or not this would have any effect. - worked on error propagation and output for flash git-svn-id: svn://svn.berlios.de/openocd/trunk@539 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/helper/command.c | 10 +++++++++- src/helper/command.h | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) (limited to 'src/helper') diff --git a/src/helper/command.c b/src/helper/command.c index 7d24d81d..ef567333 100644 --- a/src/helper/command.c +++ b/src/helper/command.c @@ -298,6 +298,7 @@ void command_print(command_context_t *context, char *format, ...) int find_and_run_command(command_context_t *context, command_t *commands, char *words[], int num_words, int start_word) { command_t *c; + int retval = ERROR_COMMAND_SYNTAX_ERROR; if (unique_length_dirty) { @@ -321,6 +322,7 @@ int find_and_run_command(command_context_t *context, command_t *commands, char * if (!c->handler) { command_print(context, "No handler for command"); + retval = ERROR_COMMAND_SYNTAX_ERROR; break; } else @@ -330,6 +332,12 @@ int find_and_run_command(command_context_t *context, command_t *commands, char * { command_print(context, "Syntax error:"); command_print_help_line(context, c, 0); + } else if (retval != ERROR_OK) + { + /* we do not print out an error message because the command *should* + * have printed out an error + */ + LOG_DEBUG("Command failed with error code %d", retval); } return retval; } @@ -347,7 +355,7 @@ int find_and_run_command(command_context_t *context, command_t *commands, char * } command_print(context, "Command %s not found", words[start_word]); - return ERROR_OK; + return retval; } int command_run_line(command_context_t *context, char *line) diff --git a/src/helper/command.h b/src/helper/command.h index 3acb8b18..6e6af75e 100644 --- a/src/helper/command.h +++ b/src/helper/command.h @@ -34,6 +34,20 @@ typedef struct command_context_s enum command_mode mode; struct command_s *commands; int current_target; + /* Execute a command. + * + * If the command fails, it *MUST* return a value != ERROR_OK + * (many commands break this rule, patches welcome!) + * + * This is *especially* important for commands such as writing + * to flash or verifying memory. The reason is that those commands + * can be used by programs to determine if the operation succeded + * or not. If the operation failed, then a program can try + * an alternative approach. + * + * Returning ERROR_COMMAND_SYNTAX_ERROR will have the effect of + * printing out the syntax of the command. + */ int (*output_handler)(struct command_context_s *context, char* line); void *output_handler_priv; } command_context_t; -- cgit v1.2.3