diff options
author | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-04-04 13:47:38 +0000 |
---|---|---|
committer | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-04-04 13:47:38 +0000 |
commit | 35b3c95299a97c05078f7dd662d66c89a356869d (patch) | |
tree | b908855a11539228608f57c61d46e06ae208f544 /src/helper | |
parent | 7abe97565e77d5a9c34099ea15ad1608567b1581 (diff) | |
download | riscv-openocd-35b3c95299a97c05078f7dd662d66c89a356869d.zip riscv-openocd-35b3c95299a97c05078f7dd662d66c89a356869d.tar.gz riscv-openocd-35b3c95299a97c05078f7dd662d66c89a356869d.tar.bz2 |
- 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
Diffstat (limited to 'src/helper')
-rw-r--r-- | src/helper/command.c | 10 | ||||
-rw-r--r-- | src/helper/command.h | 14 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/helper/command.c b/src/helper/command.c index 7d24d81..ef56733 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 3acb8b1..6e6af75 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; |