fixed a few crashes in syntax handling

git-svn-id: svn://svn.berlios.de/openocd/trunk@1060 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
oharboe 2008-10-14 13:35:38 +00:00
parent 2de5a007d1
commit c40d652546
1 changed files with 235 additions and 237 deletions

View File

@ -1236,8 +1236,7 @@ int handle_etm_config_command(struct command_context_s *cmd_ctx, char *cmd, char
if (argc != 5) if (argc != 5)
{ {
LOG_ERROR("incomplete 'etm config <target> <port_width> <port_mode> <clocking> <capture_driver>' command"); return ERROR_COMMAND_SYNTAX_ERROR;
exit(-1);
} }
target = get_target_by_num(strtoul(args[0], NULL, 0)); target = get_target_by_num(strtoul(args[0], NULL, 0));
@ -1245,13 +1244,13 @@ int handle_etm_config_command(struct command_context_s *cmd_ctx, char *cmd, char
if (!target) if (!target)
{ {
LOG_ERROR("target number '%s' not defined", args[0]); LOG_ERROR("target number '%s' not defined", args[0]);
exit(-1); return ERROR_FAIL;
} }
if (arm7_9_get_arch_pointers(target, &armv4_5, &arm7_9) != ERROR_OK) if (arm7_9_get_arch_pointers(target, &armv4_5, &arm7_9) != ERROR_OK)
{ {
command_print(cmd_ctx, "current target isn't an ARM7/ARM9 target"); command_print(cmd_ctx, "current target isn't an ARM7/ARM9 target");
return ERROR_OK; return ERROR_FAIL;
} }
switch (strtoul(args[1], NULL, 0)) switch (strtoul(args[1], NULL, 0))
@ -1267,7 +1266,7 @@ int handle_etm_config_command(struct command_context_s *cmd_ctx, char *cmd, char
break; break;
default: default:
command_print(cmd_ctx, "unsupported ETM port width '%s', must be 4, 8 or 16", args[1]); command_print(cmd_ctx, "unsupported ETM port width '%s', must be 4, 8 or 16", args[1]);
return ERROR_OK; return ERROR_FAIL;
} }
if (strcmp("normal", args[2]) == 0) if (strcmp("normal", args[2]) == 0)
@ -1285,7 +1284,7 @@ int handle_etm_config_command(struct command_context_s *cmd_ctx, char *cmd, char
else else
{ {
command_print(cmd_ctx, "unsupported ETM port mode '%s', must be 'normal', 'multiplexed' or 'demultiplexed'", args[2]); command_print(cmd_ctx, "unsupported ETM port mode '%s', must be 'normal', 'multiplexed' or 'demultiplexed'", args[2]);
return ERROR_OK; return ERROR_FAIL;
} }
if (strcmp("half", args[3]) == 0) if (strcmp("half", args[3]) == 0)
@ -1299,17 +1298,18 @@ int handle_etm_config_command(struct command_context_s *cmd_ctx, char *cmd, char
else else
{ {
command_print(cmd_ctx, "unsupported ETM port clocking '%s', must be 'full' or 'half'", args[3]); command_print(cmd_ctx, "unsupported ETM port clocking '%s', must be 'full' or 'half'", args[3]);
return ERROR_OK; return ERROR_FAIL;
} }
for (i=0; etm_capture_drivers[i]; i++) for (i=0; etm_capture_drivers[i]; i++)
{ {
if (strcmp(args[4], etm_capture_drivers[i]->name) == 0) if (strcmp(args[4], etm_capture_drivers[i]->name) == 0)
{ {
if (etm_capture_drivers[i]->register_commands(cmd_ctx) != ERROR_OK) int retval;
if ((retval=etm_capture_drivers[i]->register_commands(cmd_ctx)) != ERROR_OK)
{ {
free(etm_ctx); free(etm_ctx);
exit(-1); return retval;
} }
etm_ctx->capture_driver = etm_capture_drivers[i]; etm_ctx->capture_driver = etm_capture_drivers[i];
@ -1323,7 +1323,7 @@ int handle_etm_config_command(struct command_context_s *cmd_ctx, char *cmd, char
/* no supported capture driver found, don't register an ETM */ /* no supported capture driver found, don't register an ETM */
free(etm_ctx); free(etm_ctx);
LOG_ERROR("trace capture driver '%s' not found", args[4]); LOG_ERROR("trace capture driver '%s' not found", args[4]);
return ERROR_OK; return ERROR_FAIL;
} }
etm_ctx->target = target; etm_ctx->target = target;
@ -1347,9 +1347,7 @@ int handle_etm_config_command(struct command_context_s *cmd_ctx, char *cmd, char
arm7_9->etm_ctx = etm_ctx; arm7_9->etm_ctx = etm_ctx;
etm_register_user_commands(cmd_ctx); return etm_register_user_commands(cmd_ctx);
return ERROR_OK;
} }
int handle_etm_info_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) int handle_etm_info_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
@ -1852,7 +1850,7 @@ int etm_register_commands(struct command_context_s *cmd_ctx)
{ {
etm_cmd = register_command(cmd_ctx, NULL, "etm", NULL, COMMAND_ANY, "Embedded Trace Macrocell"); etm_cmd = register_command(cmd_ctx, NULL, "etm", NULL, COMMAND_ANY, "Embedded Trace Macrocell");
register_command(cmd_ctx, etm_cmd, "config", handle_etm_config_command, COMMAND_CONFIG, NULL); register_command(cmd_ctx, etm_cmd, "config", handle_etm_config_command, COMMAND_CONFIG, "etm config <target> <port_width> <port_mode> <clocking> <capture_driver>");
return ERROR_OK; return ERROR_OK;
} }