From 9f185eef7d69e3c9d4390f5f7dd78a7644b01c80 Mon Sep 17 00:00:00 2001
From: zwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
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 a057453bb..6e2f63d21 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 )
-- 
GitLab