check top-level command registrations

When calling module_register_commands, the return value needs to be
checked for failures.  Instead of duplicating code, use an array of
function pointers to the identical registration functions to iterate
over during startup.
__archive__
Zachary T Welch 2009-12-03 17:38:24 -08:00
parent eae56d27c3
commit c5eb8e29bd
1 changed files with 34 additions and 16 deletions

View File

@ -184,6 +184,11 @@ static const struct command_registration openocd_command_handlers[] = {
COMMAND_REGISTRATION_DONE
};
int openocd_register_commands(struct command_context *cmd_ctx)
{
return register_commands(cmd_ctx, NULL, openocd_command_handlers);
}
struct command_context *global_cmd_ctx;
/* NB! this fn can be invoked outside this file for non PC hosted builds */
@ -192,28 +197,41 @@ struct command_context *setup_command_handler(Jim_Interp *interp)
log_init();
LOG_DEBUG("log_init: complete");
struct command_context *cmd_ctx;
const char *startup = openocd_startup_tcl;
struct command_context *cmd_ctx = command_init(startup, interp);
global_cmd_ctx = cmd_ctx = command_init(openocd_startup_tcl, interp);
register_commands(cmd_ctx, NULL, openocd_command_handlers);
/* register subsystem commands */
server_register_commands(cmd_ctx);
gdb_register_commands(cmd_ctx);
log_register_commands(cmd_ctx);
jtag_register_commands(cmd_ctx);
xsvf_register_commands(cmd_ctx);
svf_register_commands(cmd_ctx);
target_register_commands(cmd_ctx);
flash_register_commands(cmd_ctx);
nand_register_commands(cmd_ctx);
pld_register_commands(cmd_ctx);
mflash_register_commands(cmd_ctx);
typedef int (*command_registrant_t)(struct command_context *cmd_ctx);
command_registrant_t command_registrants[] = {
&openocd_register_commands,
&server_register_commands,
&gdb_register_commands,
&log_register_commands,
&jtag_register_commands,
&xsvf_register_commands,
&svf_register_commands,
&target_register_commands,
&flash_register_commands,
&nand_register_commands,
&pld_register_commands,
&mflash_register_commands,
NULL
};
for (unsigned i = 0; NULL != command_registrants[i]; i++)
{
int retval = (*command_registrants[i])(cmd_ctx);
if (ERROR_OK != retval)
{
command_done(cmd_ctx);
return NULL;
}
}
LOG_DEBUG("command registration: complete");
LOG_OUTPUT(OPENOCD_VERSION "\n");
global_cmd_ctx = cmd_ctx;
return cmd_ctx;
}