summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-06-12 01:40:48 +0000
committerzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-06-12 01:40:48 +0000
commitea95cdb8e2012b21cd3a12f7062e851178c7f455 (patch)
tree14ec7031d9ee1ff5377c22b9de5d1060369837d2
parent70d853b9fa823bd973b71e7003679c001dfdf196 (diff)
downloadopenocd+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.c20
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;
}