fix ancient bug & SEGFAULT in irscan

git-svn-id: svn://svn.berlios.de/openocd/trunk@1751 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
oharboe 2009-05-12 06:17:22 +00:00
parent 30a17f0bb4
commit 9bbd933eae
1 changed files with 7 additions and 4 deletions

View File

@ -2889,9 +2889,11 @@ static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, c
} }
} }
fields = malloc(sizeof(scan_field_t) * argc / 2); int num_fields= num_fields;
for (i = 0; i < argc / 2; i++) fields = malloc(sizeof(scan_field_t) * num_fields);
for (i = 0; i < num_fields; i++)
{ {
tap = jtag_TapByString( args[i*2] ); tap = jtag_TapByString( args[i*2] );
if (tap==NULL) if (tap==NULL)
@ -2901,19 +2903,20 @@ static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, c
} }
int field_size = tap->ir_length; int field_size = tap->ir_length;
fields[i].tap = tap; fields[i].tap = tap;
fields[i].num_bits = field_size;
fields[i].out_value = malloc(CEIL(field_size, 8)); fields[i].out_value = malloc(CEIL(field_size, 8));
buf_set_u32(fields[i].out_value, 0, field_size, strtoul(args[i*2+1], NULL, 0)); buf_set_u32(fields[i].out_value, 0, field_size, strtoul(args[i*2+1], NULL, 0));
fields[i].in_value = NULL; fields[i].in_value = NULL;
} }
jtag_add_ir_scan(argc / 2, fields, TAP_INVALID); jtag_add_ir_scan(num_fields, fields, TAP_INVALID);
/* did we have an endstate? */ /* did we have an endstate? */
if (endstate != TAP_INVALID) if (endstate != TAP_INVALID)
jtag_add_end_state(endstate); jtag_add_end_state(endstate);
jtag_execute_queue(); jtag_execute_queue();
for (i = 0; i < argc / 2; i++) for (i = 0; i < num_fields; i++)
free(fields[i].out_value); free(fields[i].out_value);
free (fields); free (fields);