summaryrefslogtreecommitdiff
path: root/src/helper
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-04-04 13:47:38 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-04-04 13:47:38 +0000
commit35b3c95299a97c05078f7dd662d66c89a356869d (patch)
treeb908855a11539228608f57c61d46e06ae208f544 /src/helper
parent7abe97565e77d5a9c34099ea15ad1608567b1581 (diff)
downloadopenocd_libswd-35b3c95299a97c05078f7dd662d66c89a356869d.tar.gz
openocd_libswd-35b3c95299a97c05078f7dd662d66c89a356869d.tar.bz2
openocd_libswd-35b3c95299a97c05078f7dd662d66c89a356869d.tar.xz
openocd_libswd-35b3c95299a97c05078f7dd662d66c89a356869d.zip
- 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.c10
-rw-r--r--src/helper/command.h14
2 files changed, 23 insertions, 1 deletions
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;