From b7b561aae809ab9022b9f213dc5a12b6d58ce2ee Mon Sep 17 00:00:00 2001
From: Zachary T Welch <zw@superlucidity.net>
Date: Thu, 22 Oct 2009 21:05:50 -0700
Subject: [PATCH] Improve jtag command argument parsing.

---
 src/jtag/amt_jtagaccel.c |  6 +++---
 src/jtag/ft2232.c        |  8 ++------
 src/jtag/gw16012.c       |  4 +---
 src/jtag/parport.c       |  4 +---
 src/jtag/tcl.c           | 40 +++++++++++++++-------------------------
 src/jtag/vsllink.c       | 25 ++++++++++++++-----------
 6 files changed, 36 insertions(+), 51 deletions(-)

diff --git a/src/jtag/amt_jtagaccel.c b/src/jtag/amt_jtagaccel.c
index b12aa7631..e3f440cce 100644
--- a/src/jtag/amt_jtagaccel.c
+++ b/src/jtag/amt_jtagaccel.c
@@ -534,9 +534,9 @@ static int amt_jtagaccel_handle_parport_port_command(
 		/* only if the port wasn't overwritten by cmdline */
 		if (amt_jtagaccel_port == 0)
 		{
-			int retval = parse_u16(args[0], &amt_jtagaccel_port);
-			if (ERROR_OK != retval)
-				return retval;
+			uint16_t port;
+			COMMAND_PARSE_NUMBER(u16, args[0], port);
+			amt_jtagaccel_port = port;
 		}
 		else
 		{
diff --git a/src/jtag/ft2232.c b/src/jtag/ft2232.c
index bd910b35f..b3389cc88 100644
--- a/src/jtag/ft2232.c
+++ b/src/jtag/ft2232.c
@@ -2919,12 +2919,8 @@ static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char
 	int retval = ERROR_OK;
 	for (i = 0; i < argc; i += 2)
 	{
-		retval = parse_u16(args[i], &ft2232_vid[i >> 1]);
-		if (ERROR_OK != retval)
-			break;
-		retval = parse_u16(args[i + 1], &ft2232_pid[i >> 1]);
-		if (ERROR_OK != retval)
-			break;
+		COMMAND_PARSE_NUMBER(u16, args[i], ft2232_vid[i >> 1]);
+		COMMAND_PARSE_NUMBER(u16, args[i + 1], ft2232_pid[i >> 1]);
 	}
 
 	/*
diff --git a/src/jtag/gw16012.c b/src/jtag/gw16012.c
index 46635d073..4b0ffd738 100644
--- a/src/jtag/gw16012.c
+++ b/src/jtag/gw16012.c
@@ -576,9 +576,7 @@ static int gw16012_handle_parport_port_command(struct command_context_s *cmd_ctx
 		/* only if the port wasn't overwritten by cmdline */
 		if (gw16012_port == 0)
 		{
-			int retval = parse_u16(args[0], &gw16012_port);
-			if (ERROR_OK != retval)
-				return retval;
+			COMMAND_PARSE_NUMBER(u16, args[0], gw16012_port);
 		}
 		else
 		{
diff --git a/src/jtag/parport.c b/src/jtag/parport.c
index 41e02475b..12a5eea56 100644
--- a/src/jtag/parport.c
+++ b/src/jtag/parport.c
@@ -435,9 +435,7 @@ static int parport_handle_parport_port_command(struct command_context_s *cmd_ctx
 		/* only if the port wasn't overwritten by cmdline */
 		if (parport_port == 0)
 		{
-			int retval = parse_u16(args[0], &parport_port);
-			if (ERROR_OK != retval)
-				return retval;
+			COMMAND_PARSE_NUMBER(u16, args[0], parport_port);
 		}
 		else
 		{
diff --git a/src/jtag/tcl.c b/src/jtag/tcl.c
index 5056a5c5d..c064a8256 100644
--- a/src/jtag/tcl.c
+++ b/src/jtag/tcl.c
@@ -1050,9 +1050,8 @@ static int handle_jtag_nsrst_delay_command(struct command_context_s *cmd_ctx,
 	if (argc == 1)
 	{
 		unsigned delay;
-		int retval = parse_uint(args[0], &delay);
-		if (ERROR_OK != retval)
-			return retval;
+		COMMAND_PARSE_NUMBER(uint, args[0], delay);
+
 		jtag_set_nsrst_delay(delay);
 	}
 	command_print(cmd_ctx, "jtag_nsrst_delay: %u", jtag_get_nsrst_delay());
@@ -1067,9 +1066,8 @@ static int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx,
 	if (argc == 1)
 	{
 		unsigned delay;
-		int retval = parse_uint(args[0], &delay);
-		if (ERROR_OK != retval)
-			return retval;
+		COMMAND_PARSE_NUMBER(uint, args[0], delay);
+
 		jtag_set_ntrst_delay(delay);
 	}
 	command_print(cmd_ctx, "jtag_ntrst_delay: %u", jtag_get_ntrst_delay());
@@ -1084,9 +1082,8 @@ static int handle_jtag_nsrst_assert_width_command(struct command_context_s *cmd_
 	if (argc == 1)
 	{
 		unsigned delay;
-		int retval = parse_uint(args[0], &delay);
-		if (ERROR_OK != retval)
-			return retval;
+		COMMAND_PARSE_NUMBER(uint, args[0], delay);
+
 		jtag_set_nsrst_assert_width(delay);
 	}
 	command_print(cmd_ctx, "jtag_nsrst_assert_width: %u", jtag_get_nsrst_assert_width());
@@ -1101,9 +1098,8 @@ static int handle_jtag_ntrst_assert_width_command(struct command_context_s *cmd_
 	if (argc == 1)
 	{
 		unsigned delay;
-		int retval = parse_uint(args[0], &delay);
-		if (ERROR_OK != retval)
-			return retval;
+		COMMAND_PARSE_NUMBER(uint, args[0], delay);
+
 		jtag_set_ntrst_assert_width(delay);
 	}
 	command_print(cmd_ctx, "jtag_ntrst_assert_width: %u", jtag_get_ntrst_assert_width());
@@ -1124,11 +1120,9 @@ static int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cm
 		LOG_DEBUG("handle jtag speed");
 
 		unsigned cur_speed = 0;
-		int retval = parse_uint(args[0], &cur_speed);
-		if (ERROR_OK != retval)
-			return retval;
-		retval = jtag_config_speed(cur_speed);
+		COMMAND_PARSE_NUMBER(uint, args[0], cur_speed);
 
+		retval = jtag_config_speed(cur_speed);
 	}
 	command_print(cmd_ctx, "jtag_speed: %d", jtag_get_speed());
 
@@ -1144,9 +1138,8 @@ static int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd,
 	if (argc == 1)
 	{
 		unsigned khz = 0;
-		int retval = parse_uint(args[0], &khz);
-		if (ERROR_OK != retval)
-			return retval;
+		COMMAND_PARSE_NUMBER(uint, args[0], khz);
+
 		retval = jtag_config_khz(khz);
 		if (ERROR_OK != retval)
 			return retval;
@@ -1174,9 +1167,8 @@ static int handle_jtag_rclk_command(struct command_context_s *cmd_ctx, char *cmd
 	if (argc == 1)
 	{
 		unsigned khz = 0;
-		int retval = parse_uint(args[0], &khz);
-		if (ERROR_OK != retval)
-			return retval;
+		COMMAND_PARSE_NUMBER(uint, args[0], khz);
+
 		retval = jtag_config_rclk(khz);
 		if (ERROR_OK != retval)
 			return retval;
@@ -1231,9 +1223,7 @@ static int handle_runtest_command(struct command_context_s *cmd_ctx,
 		return ERROR_COMMAND_SYNTAX_ERROR;
 
 	unsigned num_clocks;
-	int retval = parse_uint(args[0], &num_clocks);
-	if (ERROR_OK != retval)
-		return retval;
+	COMMAND_PARSE_NUMBER(uint, args[0], num_clocks);
 
 	jtag_add_runtest(num_clocks, TAP_IDLE);
 	return jtag_execute_queue();
diff --git a/src/jtag/vsllink.c b/src/jtag/vsllink.c
index ab55a1901..1f1b86705 100644
--- a/src/jtag/vsllink.c
+++ b/src/jtag/vsllink.c
@@ -1407,7 +1407,8 @@ static int vsllink_handle_usb_vid_command(struct command_context_s *cmd_ctx, cha
 		return ERROR_OK;
 	}
 
-	return parse_u16(args[0], &vsllink_usb_vid);
+	COMMAND_PARSE_NUMBER(u16, args[0], vsllink_usb_vid);
+	return ERROR_OK;
 }
 
 static int vsllink_handle_usb_pid_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
@@ -1417,7 +1418,8 @@ static int vsllink_handle_usb_pid_command(struct command_context_s *cmd_ctx, cha
 		LOG_ERROR("parameter error, should be one parameter for PID");
 		return ERROR_OK;
 	}
-	return parse_u16(args[0], &vsllink_usb_pid);
+	COMMAND_PARSE_NUMBER(u16, args[0], vsllink_usb_pid);
+	return ERROR_OK;
 }
 
 static int vsllink_handle_usb_bulkin_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
@@ -1428,11 +1430,11 @@ static int vsllink_handle_usb_bulkin_command(struct command_context_s *cmd_ctx,
 		return ERROR_OK;
 	}
 
-	int retval = parse_u8(args[0], &vsllink_usb_bulkin);
-	if (ERROR_OK == retval)
-		vsllink_usb_bulkin |= 0x80;
+	COMMAND_PARSE_NUMBER(u8, args[0], vsllink_usb_bulkin);
 
-	return retval;
+	vsllink_usb_bulkin |= 0x80;
+
+	return ERROR_OK;
 }
 
 static int vsllink_handle_usb_bulkout_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
@@ -1443,11 +1445,11 @@ static int vsllink_handle_usb_bulkout_command(struct command_context_s *cmd_ctx,
 		return ERROR_OK;
 	}
 
-	int retval = parse_u8(args[0], &vsllink_usb_bulkout);
-	if (ERROR_OK == retval)
-		vsllink_usb_bulkout &= ~0x80;
+	COMMAND_PARSE_NUMBER(u8, args[0], vsllink_usb_bulkin);
 
-	return retval;
+	vsllink_usb_bulkout &= ~0x80;
+
+	return ERROR_OK;
 }
 
 static int vsllink_handle_usb_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
@@ -1458,7 +1460,8 @@ static int vsllink_handle_usb_interface_command(struct command_context_s *cmd_ct
 		return ERROR_OK;
 	}
 
-	return parse_u8(args[0], &vsllink_usb_interface);
+	COMMAND_PARSE_NUMBER(u8, args[0], vsllink_usb_interface);
+	return ERROR_OK;
 }
 
 /***************************************************************************/
-- 
GitLab