X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fhelper%2Fcommand.c;h=a179578c23790ca3a96f469132c51bacd01be8f0;hp=ef0afa2b56bca06e5b88e13ce4c5ca2c97b4ec2b;hb=117cff71d52e221e102af0face3d20ccee53cc57;hpb=10fd274cfe5447fec8a4b8d3757787d086952deb diff --git a/src/helper/command.c b/src/helper/command.c index ef0afa2b56..a179578c23 100644 --- a/src/helper/command.c +++ b/src/helper/command.c @@ -24,14 +24,14 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * ***************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif -/* see Embedder-HOWTO.txt in Jim Tcl project hosted on BerliOS*/ +/* see Embedded-HOWTO.txt in Jim Tcl project hosted on BerliOS*/ #define JIM_EMBEDDED /* @todo the inclusion of target.h here is a layering violation */ @@ -152,6 +152,7 @@ static void script_command_args_free(const char **words, unsigned nwords) free((void *)words[i]); free(words); } + static const char **script_command_args_alloc( unsigned argc, Jim_Obj * const *argv, unsigned *nwords) { @@ -244,6 +245,7 @@ static struct command *command_find(struct command *head, const char *name) } return NULL; } + struct command *command_find_in_context(struct command_context *cmd_ctx, const char *name) { @@ -570,6 +572,7 @@ static char *__command_name(struct command *c, char delim, unsigned extra) } return name; } + char *command_name(struct command *c, char delim) { return __command_name(c, delim, 0); @@ -777,7 +780,7 @@ static int jim_capture(Jim_Interp *interp, int argc, Jim_Obj *const *argv) /* disable polling during capture. This avoids capturing output * from polling. * - * This is necessary in order to avoid accidentially getting a non-empty + * This is necessary in order to avoid accidentally getting a non-empty * string for tcl fn's. */ bool save_poll = jtag_poll_get_enabled(); @@ -811,13 +814,13 @@ static COMMAND_HELPER(command_help_find, struct command *head, } static COMMAND_HELPER(command_help_show, struct command *c, unsigned n, - bool show_help, const char *match); + bool show_help, const char *cmd_match); static COMMAND_HELPER(command_help_show_list, struct command *head, unsigned n, - bool show_help, const char *match) + bool show_help, const char *cmd_match) { for (struct command *c = head; NULL != c; c = c->next) - CALL_COMMAND_HANDLER(command_help_show, c, n, show_help, match); + CALL_COMMAND_HANDLER(command_help_show, c, n, show_help, cmd_match); return ERROR_OK; } @@ -847,8 +850,9 @@ static void command_help_show_wrap(const char *str, unsigned n, unsigned n2) n = n2; } } + static COMMAND_HELPER(command_help_show, struct command *c, unsigned n, - bool show_help, const char *match) + bool show_help, const char *cmd_match) { char *cmd_name = command_name(c, ' '); if (NULL == cmd_name) @@ -856,9 +860,9 @@ static COMMAND_HELPER(command_help_show, struct command *c, unsigned n, /* If the match string occurs anywhere, we print out * stuff for this command. */ - bool is_match = (strstr(cmd_name, match) != NULL) || - ((c->usage != NULL) && (strstr(c->usage, match) != NULL)) || - ((c->help != NULL) && (strstr(c->help, match) != NULL)); + bool is_match = (strstr(cmd_name, cmd_match) != NULL) || + ((c->usage != NULL) && (strstr(c->usage, cmd_match) != NULL)) || + ((c->help != NULL) && (strstr(c->help, cmd_match) != NULL)); if (is_match) { command_help_show_indent(n); @@ -909,37 +913,35 @@ static COMMAND_HELPER(command_help_show, struct command *c, unsigned n, } return CALL_COMMAND_HANDLER(command_help_show_list, - c->children, n, show_help, match); + c->children, n, show_help, cmd_match); } + COMMAND_HANDLER(handle_help_command) { bool full = strcmp(CMD_NAME, "help") == 0; int retval; struct command *c = CMD_CTX->commands; - char *match = NULL; + char *cmd_match = NULL; if (CMD_ARGC == 0) - match = ""; + cmd_match = ""; else if (CMD_ARGC >= 1) { unsigned i; for (i = 0; i < CMD_ARGC; ++i) { - if (NULL != match) { - char *prev = match; + if (NULL != cmd_match) { + char *prev = cmd_match; - match = alloc_printf("%s %s", match, - CMD_ARGV[i]); + cmd_match = alloc_printf("%s %s", cmd_match, CMD_ARGV[i]); free(prev); - if (NULL == match) { - LOG_ERROR("unable to build " - "search string"); + if (NULL == cmd_match) { + LOG_ERROR("unable to build search string"); return -ENOMEM; } } else { - match = alloc_printf("%s", CMD_ARGV[i]); - if (NULL == match) { - LOG_ERROR("unable to build " - "search string"); + cmd_match = alloc_printf("%s", CMD_ARGV[i]); + if (NULL == cmd_match) { + LOG_ERROR("unable to build search string"); return -ENOMEM; } } @@ -948,10 +950,10 @@ COMMAND_HANDLER(handle_help_command) return ERROR_COMMAND_SYNTAX_ERROR; retval = CALL_COMMAND_HANDLER(command_help_show_list, - c, 0, full, match); + c, 0, full, cmd_match); if (CMD_ARGC >= 1) - free(match); + free(cmd_match); return retval; } @@ -1311,6 +1313,8 @@ struct command_context *command_init(const char *startup_tcl, Jim_Interp *interp HostOs = "ecos"; #elif defined(__FreeBSD__) HostOs = "freebsd"; +#elif defined(__NetBSD__) + HostOs = "netbsd"; #elif defined(__OpenBSD__) HostOs = "openbsd"; #else @@ -1400,19 +1404,21 @@ DEFINE_PARSE_NUM_TYPE(_llong, long long, strtoll, LLONG_MIN, LLONG_MAX) return ERROR_OK; \ } -#define DEFINE_PARSE_ULONG(name, type, min, max) \ - DEFINE_PARSE_WRAPPER(name, type, min, max, unsigned long, _ulong) -DEFINE_PARSE_ULONG(_uint, unsigned, 0, UINT_MAX) -DEFINE_PARSE_ULONG(_u32, uint32_t, 0, UINT32_MAX) -DEFINE_PARSE_ULONG(_u16, uint16_t, 0, UINT16_MAX) -DEFINE_PARSE_ULONG(_u8, uint8_t, 0, UINT8_MAX) - -#define DEFINE_PARSE_LONG(name, type, min, max) \ - DEFINE_PARSE_WRAPPER(name, type, min, max, long, _long) -DEFINE_PARSE_LONG(_int, int, n < INT_MIN, INT_MAX) -DEFINE_PARSE_LONG(_s32, int32_t, n < INT32_MIN, INT32_MAX) -DEFINE_PARSE_LONG(_s16, int16_t, n < INT16_MIN, INT16_MAX) -DEFINE_PARSE_LONG(_s8, int8_t, n < INT8_MIN, INT8_MAX) +#define DEFINE_PARSE_ULONGLONG(name, type, min, max) \ + DEFINE_PARSE_WRAPPER(name, type, min, max, unsigned long long, _ullong) +DEFINE_PARSE_ULONGLONG(_uint, unsigned, 0, UINT_MAX) +DEFINE_PARSE_ULONGLONG(_u64, uint64_t, 0, UINT64_MAX) +DEFINE_PARSE_ULONGLONG(_u32, uint32_t, 0, UINT32_MAX) +DEFINE_PARSE_ULONGLONG(_u16, uint16_t, 0, UINT16_MAX) +DEFINE_PARSE_ULONGLONG(_u8, uint8_t, 0, UINT8_MAX) + +#define DEFINE_PARSE_LONGLONG(name, type, min, max) \ + DEFINE_PARSE_WRAPPER(name, type, min, max, long long, _llong) +DEFINE_PARSE_LONGLONG(_int, int, n < INT_MIN, INT_MAX) +DEFINE_PARSE_LONGLONG(_s64, int64_t, n < INT64_MIN, INT64_MAX) +DEFINE_PARSE_LONGLONG(_s32, int32_t, n < INT32_MIN, INT32_MAX) +DEFINE_PARSE_LONGLONG(_s16, int16_t, n < INT16_MIN, INT16_MAX) +DEFINE_PARSE_LONGLONG(_s8, int8_t, n < INT8_MIN, INT8_MAX) static int command_parse_bool(const char *in, bool *out, const char *on, const char *off)