From 9f185eef7d69e3c9d4390f5f7dd78a7644b01c80 Mon Sep 17 00:00:00 2001 From: zwelch Date: Tue, 9 Jun 2009 02:23:27 +0000 Subject: [PATCH] Simplify and fix bug in jtag_tap_by_string: - Bug fix: Use unsigned type and strtoul when parsing for position number. - Simplify logic by returning directly when a tap is found by name. - Reduce scope: declare temporary variables with first use. - Bring code up to current style guidelines. git-svn-id: svn://svn.berlios.de/openocd/trunk@2141 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/jtag/jtag.c | 37 +++++++++++++++---------------------- 1 file 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 ) -- 2.39.5