summaryrefslogtreecommitdiff
path: root/src/jtag
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-11-19 08:22:47 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-11-19 08:22:47 +0000
commite3462b228ce9533b6e7989361f9c4090043a8aa4 (patch)
treef482d79463d1cf52eef9a2f934fea29261b06b70 /src/jtag
parentcb434c21af5066899c5013a3a3490471f91d4b43 (diff)
downloadopenocd+libswd-e3462b228ce9533b6e7989361f9c4090043a8aa4.tar.gz
openocd+libswd-e3462b228ce9533b6e7989361f9c4090043a8aa4.tar.bz2
openocd+libswd-e3462b228ce9533b6e7989361f9c4090043a8aa4.tar.xz
openocd+libswd-e3462b228ce9533b6e7989361f9c4090043a8aa4.zip
jtag_get_device() now returns NULL and reports error instead of invoking exit()
git-svn-id: svn://svn.berlios.de/openocd/trunk@1176 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/jtag')
-rw-r--r--src/jtag/jtag.c13
-rw-r--r--src/jtag/zy1000.c9
2 files changed, 18 insertions, 4 deletions
diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c
index 6a84db40..d8f3ccdc 100644
--- a/src/jtag/jtag.c
+++ b/src/jtag/jtag.c
@@ -369,7 +369,7 @@ jtag_device_t* jtag_get_device(int num)
}
LOG_ERROR("jtag device number %d not defined", num);
- exit(-1);
+ return NULL;
}
void* cmd_queue_alloc(size_t size)
@@ -477,6 +477,10 @@ int MINIDRIVER(interface_jtag_add_ir_scan)(int num_fields, scan_field_t *fields,
{
int found = 0;
device = jtag_get_device(i);
+ if (device == NULL)
+ {
+ exit(-1);
+ }
scan_size = device->ir_length;
(*last_cmd)->cmd.scan->fields[i].device = i;
(*last_cmd)->cmd.scan->fields[i].num_bits = scan_size;
@@ -2120,7 +2124,12 @@ int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, char **a
for (i = 0; i < argc / 2; i++)
{
int device = strtoul(args[i*2], NULL, 0);
- int field_size = jtag_get_device(device)->ir_length;
+ jtag_device_t *device_ptr=jtag_get_device(device);
+ if (device==NULL)
+ {
+ return ERROR_FAIL;
+ }
+ int field_size = device_ptr->ir_length;
fields[i].device = device;
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));
diff --git a/src/jtag/zy1000.c b/src/jtag/zy1000.c
index a50ed529..5ec1d8ad 100644
--- a/src/jtag/zy1000.c
+++ b/src/jtag/zy1000.c
@@ -501,6 +501,11 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, enum tap_st
int pause=i==(jtag_num_devices-1);
int found = 0;
device = jtag_get_device(i);
+ if (device==NULL)
+ {
+ return ERROR_FAIL;
+ }
+
scan_size = device->ir_length;
/* search the list */
@@ -521,7 +526,7 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, enum tap_st
scanFields(1, fields+j, TAP_SI, pause);
/* update device information */
- buf_cpy(fields[j].out_value, jtag_get_device(i)->cur_instr, scan_size);
+ buf_cpy(fields[j].out_value, device->cur_instr, scan_size);
device->bypass = 0;
break;
@@ -539,7 +544,7 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, enum tap_st
tmp.num_bits = scan_size;
scanFields(1, &tmp, TAP_SI, pause);
/* update device information */
- buf_cpy(tmp.out_value, jtag_get_device(i)->cur_instr, scan_size);
+ buf_cpy(tmp.out_value, device->cur_instr, scan_size);
device->bypass = 1;
}
}