]> git.sur5r.net Git - openocd/commitdiff
Improve VID/PID command argument handling in FTDI driver:
authorzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 12 Jun 2009 01:40:48 +0000 (01:40 +0000)
committerzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 12 Jun 2009 01:40:48 +0000 (01:40 +0000)
- 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

src/jtag/ft2232.c

index 4bc2f3fe43e6f4dbaab6354c756da8ada641a1af..a458315ba7550a402cac062340ad5b42c0ea7230 100644 (file)
@@ -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;
 }