summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-07-07 12:19:17 +0000
committerntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-07-07 12:19:17 +0000
commit994396da593f56bb12b564c06e8d9d4d5cde8557 (patch)
tree83b5327e5d38b361bee8878dd0f918a0e0bdccbd
parentb31d83c6c7eb274144acc7c40ea4bf8424b6b1e0 (diff)
downloadopenocd_libswd-994396da593f56bb12b564c06e8d9d4d5cde8557.tar.gz
openocd_libswd-994396da593f56bb12b564c06e8d9d4d5cde8557.tar.bz2
openocd_libswd-994396da593f56bb12b564c06e8d9d4d5cde8557.tar.xz
openocd_libswd-994396da593f56bb12b564c06e8d9d4d5cde8557.zip
- command_run_line will only search once for the command, and execute if found
git-svn-id: svn://svn.berlios.de/openocd/trunk@766 b42882b7-edfa-0310-969c-e2dbd0fdcd60
-rw-r--r--src/helper/command.c45
-rw-r--r--src/helper/command.h1
2 files changed, 20 insertions, 26 deletions
diff --git a/src/helper/command.c b/src/helper/command.c
index e30e2d38..42ff199b 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -397,11 +397,11 @@ int find_and_run_command(command_context_t *context, command_t *commands, char *
{
int start_word=0;
command_t *c;
- c=find_command(context, commands, words, num_words, start_word, &start_word);
- if (c==NULL)
+ c = find_command(context, commands, words, num_words, start_word, &start_word);
+ if (c == NULL)
{
- command_print(context, "Command %s not found", words[start_word]);
- return ERROR_COMMAND_SYNTAX_ERROR;
+ /* just return command not found */
+ return ERROR_COMMAND_NOTFOUND;
}
int retval = c->handler(context, c->name, words + start_word + 1, num_words - start_word - 1);
@@ -421,10 +421,11 @@ int find_and_run_command(command_context_t *context, command_t *commands, char *
*/
LOG_DEBUG("Command failed with error code %d", retval);
}
+
return retval;
}
-int command_run_line_internal_op(command_context_t *context, char *line, int run)
+int command_run_line_internal(command_context_t *context, char *line)
{
LOG_USER_N("%s", ""); /* Keep GDB connection alive*/
@@ -445,23 +446,13 @@ int command_run_line_internal_op(command_context_t *context, char *line, int run
if (*line && (line[0] == '#'))
return ERROR_OK;
- if (run)
- {
- LOG_DEBUG("%s", line);
- }
+ LOG_DEBUG("%s", line);
nwords = parse_line(line, words, sizeof(words) / sizeof(words[0]));
if (nwords > 0)
{
- if (run)
- {
- retval = find_and_run_command(context, context->commands, words, nwords);
- } else
- {
- int t;
- return (find_command(context, context->commands, words, nwords, 0, &t)!=NULL)?ERROR_OK:ERROR_FAIL;
- }
+ retval = find_and_run_command(context, context->commands, words, nwords);
}
else
return ERROR_INVALID_ARGUMENTS;
@@ -472,17 +463,14 @@ int command_run_line_internal_op(command_context_t *context, char *line, int run
return retval;
}
-int command_run_line_internal(command_context_t *context, char *line)
-{
- return command_run_line_internal_op(context, line, 1);
-}
-
int command_run_line(command_context_t *context, char *line)
{
+ int retval;
+
if ((!context) || (!line))
return ERROR_INVALID_ARGUMENTS;
-
- if (command_run_line_internal_op(context, line, 0)!=ERROR_OK)
+
+ if ((retval = command_run_line_internal(context, line)) == ERROR_COMMAND_NOTFOUND)
{
/* If we can't find a command, then try the interpreter.
* If there is no interpreter implemented, then this will
@@ -491,10 +479,11 @@ int command_run_line(command_context_t *context, char *line)
* These hooks were left in to reduce patch size for
* wip to add scripting language.
*/
+
return jim_command(context, line);
}
-
- return command_run_line_internal(context, line);
+
+ return retval;
}
int command_run_file(command_context_t *context, FILE *file, enum command_mode mode)
@@ -721,6 +710,10 @@ int handle_time_command(struct command_context_s *cmd_ctx, char *cmd, char **arg
duration_start_measure(&duration);
retval = find_and_run_command(cmd_ctx, cmd_ctx->commands, args, argc);
+ if (retval == ERROR_COMMAND_NOTFOUND)
+ {
+ command_print(cmd_ctx, "Command %s not found", args[0]);
+ }
duration_stop_measure(&duration, &duration_text);
diff --git a/src/helper/command.h b/src/helper/command.h
index 6381bf35..ea3383e3 100644
--- a/src/helper/command.h
+++ b/src/helper/command.h
@@ -81,6 +81,7 @@ extern void command_output_text(command_context_t *context, const char *data);
#define ERROR_COMMAND_CLOSE_CONNECTION (-600)
#define ERROR_COMMAND_SYNTAX_ERROR (-601)
+#define ERROR_COMMAND_NOTFOUND (-602)
extern int fast_and_dangerous;