diff options
author | Zachary T Welch <zw@superlucidity.net> | 2009-12-03 17:38:24 -0800 |
---|---|---|
committer | Zachary T Welch <zw@superlucidity.net> | 2009-12-04 03:29:15 -0800 |
commit | c5eb8e29bdc296c2d0b25cc771639567b5f7707f (patch) | |
tree | 49861352c57f3a331a2b4a173e6d8b679100e7ef /src/openocd.c | |
parent | eae56d27c3892188560918526710d44d147b0c8d (diff) | |
download | riscv-openocd-c5eb8e29bdc296c2d0b25cc771639567b5f7707f.zip riscv-openocd-c5eb8e29bdc296c2d0b25cc771639567b5f7707f.tar.gz riscv-openocd-c5eb8e29bdc296c2d0b25cc771639567b5f7707f.tar.bz2 |
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.
Diffstat (limited to 'src/openocd.c')
-rw-r--r-- | src/openocd.c | 50 |
1 files changed, 34 insertions, 16 deletions
diff --git a/src/openocd.c b/src/openocd.c index da15969..0ae0d19 100644 --- a/src/openocd.c +++ b/src/openocd.c @@ -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; - - global_cmd_ctx = cmd_ctx = command_init(openocd_startup_tcl, interp); + const char *startup = openocd_startup_tcl; + struct command_context *cmd_ctx = command_init(startup, 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; } |