diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/jtag/jtag.c | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c index a057453b..6e2f63d2 100644 --- a/src/jtag/jtag.c +++ b/src/jtag/jtag.c @@ -279,31 +279,24 @@ void jtag_tap_add(struct jtag_tap_s *t) *tap = t; } -jtag_tap_t *jtag_tap_by_string( const char *s ) +jtag_tap_t *jtag_tap_by_string(const char *s) { - jtag_tap_t *t; + /* try by name first */ + jtag_tap_t *t = jtag_all_taps(); + while (t) + { + if (0 == strcmp(t->dotted_name, s)) + return t; + t = t->next_tap; + } + + /* no tap found by name, so try to parse the name as a number */ char *cp; + unsigned n = strtoul(s, &cp, 0); + if ((s == cp) || (*cp != 0)) + return NULL; - t = jtag_all_taps(); - /* try name first */ - while(t){ - if( 0 == strcmp( t->dotted_name, s ) ){ - break; - } else { - t = t->next_tap; - } - } - /* backup plan is by number */ - if( t == NULL ){ - /* ok - is "s" a number? */ - int n; - n = strtol( s, &cp, 0 ); - if( (s != cp) && (*cp == 0) ){ - /* Then it is... */ - t = jtag_tap_by_abs_position(n); - } - } - return t; + return jtag_tap_by_abs_position(n); } jtag_tap_t * jtag_tap_by_jim_obj( Jim_Interp *interp, Jim_Obj *o ) |