diff options
| author | zwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-06-12 01:40:48 +0000 | 
|---|---|---|
| committer | zwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-06-12 01:40:48 +0000 | 
| commit | ea95cdb8e2012b21cd3a12f7062e851178c7f455 (patch) | |
| tree | 14ec7031d9ee1ff5377c22b9de5d1060369837d2 | |
| parent | 70d853b9fa823bd973b71e7003679c001dfdf196 (diff) | |
| download | openocd+libswd-ea95cdb8e2012b21cd3a12f7062e851178c7f455.tar.gz openocd+libswd-ea95cdb8e2012b21cd3a12f7062e851178c7f455.tar.bz2 openocd+libswd-ea95cdb8e2012b21cd3a12f7062e851178c7f455.tar.xz openocd+libswd-ea95cdb8e2012b21cd3a12f7062e851178c7f455.zip | |
Improve VID/PID command argument handling in FTDI driver:
- Bug fix: Return a syntax error when less than two arguments are given.
- Bug fix: Use parse_u16 helper to ensure vales are parsed properly.
- Simplify loop termination logic by ensuring argc is always even.
- Move loop induction variable declaration to where it is used.
git-svn-id: svn://svn.berlios.de/openocd/trunk@2215 b42882b7-edfa-0310-969c-e2dbd0fdcd60
| -rw-r--r-- | src/jtag/ft2232.c | 20 | 
1 files changed, 13 insertions, 7 deletions
| diff --git a/src/jtag/ft2232.c b/src/jtag/ft2232.c index 4bc2f3fe..a458315b 100644 --- a/src/jtag/ft2232.c +++ b/src/jtag/ft2232.c @@ -2827,8 +2827,6 @@ static int ft2232_handle_layout_command(struct command_context_s* cmd_ctx, char*  static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc)  { -	int i; -  	if (argc > MAX_USB_IDS * 2)  	{  		LOG_WARNING("ignoring extra IDs in ft2232_vid_pid " @@ -2839,13 +2837,21 @@ static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char  	{  		LOG_WARNING("incomplete ft2232_vid_pid configuration directive");  		if (argc < 2) -			return ERROR_OK; +			return ERROR_COMMAND_SYNTAX_ERROR; +		// remove the incomplete trailing id +		argc -= 1;  	} -	for (i = 0; i + 1 < argc; i += 2) +	int i; +	int retval = ERROR_OK; +	for (i = 0; i < argc; i += 2)  	{ -		ft2232_vid[i >> 1] = strtol(args[i], NULL, 0); -		ft2232_pid[i >> 1] = strtol(args[i + 1], NULL, 0); +		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;  	}  	/* @@ -2854,7 +2860,7 @@ static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char  	 */  	ft2232_vid[i >> 1] = ft2232_pid[i >> 1] = 0; -	return ERROR_OK; +	return retval;  } | 
