combined_list_size, REG_CLASS_ALL);
unsigned int combined_allocated = 256;
- *combined_list = malloc(combined_allocated * sizeof(struct reg *));
- if (*combined_list == NULL) {
+ struct reg **local_list = malloc(combined_allocated * sizeof(struct reg *));
+ if (!local_list) {
LOG_ERROR("malloc(%zu) failed", combined_allocated * sizeof(struct reg *));
return ERROR_FAIL;
}
- *combined_list_size = 0;
+ unsigned int local_list_size = 0;
struct target_list *head;
foreach_smp_target(head, target->smp_targets) {
int result = target_get_gdb_reg_list_noread(head->target, ®_list,
®_list_size, reg_class);
if (result != ERROR_OK) {
- free(*combined_list);
+ free(local_list);
return result;
}
for (int i = 0; i < reg_list_size; i++) {
/* Nested loop makes this O(n^2), but this entire function with
* 5 RISC-V targets takes just 2ms on my computer. Fast enough
* for me. */
- for (int j = 0; j < *combined_list_size; j++) {
- struct reg *b = (*combined_list)[j];
+ for (unsigned int j = 0; j < local_list_size; j++) {
+ struct reg *b = local_list[j];
if (!strcmp(a->name, b->name)) {
found = true;
if (a->size != b->size) {
"target, but %d bits on another target.",
a->name, a->size, b->size);
free(reg_list);
- free(*combined_list);
+ free(local_list);
return ERROR_FAIL;
}
break;
}
if (!found) {
LOG_DEBUG("[%s] %s not found in combined list", target_name(target), a->name);
- if (*combined_list_size >= (int) combined_allocated) {
+ if (local_list_size >= combined_allocated) {
combined_allocated *= 2;
- *combined_list = realloc(*combined_list, combined_allocated * sizeof(struct reg *));
- if (*combined_list == NULL) {
+ local_list = realloc(local_list, combined_allocated * sizeof(struct reg *));
+ if (!local_list) {
LOG_ERROR("realloc(%zu) failed", combined_allocated * sizeof(struct reg *));
return ERROR_FAIL;
}
}
- (*combined_list)[*combined_list_size] = a;
- (*combined_list_size)++;
+ local_list[local_list_size] = a;
+ local_list_size++;
}
}
}
int result = target_get_gdb_reg_list_noread(head->target, ®_list,
®_list_size, reg_class);
if (result != ERROR_OK) {
- free(*combined_list);
+ free(local_list);
return result;
}
- for (int i = 0; i < *combined_list_size; i++) {
+ for (unsigned int i = 0; i < local_list_size; i++) {
bool found = false;
- struct reg *a = (*combined_list)[i];
+ struct reg *a = local_list[i];
for (int j = 0; j < reg_list_size; j++) {
struct reg *b = reg_list[j];
if (b->exist && !strcmp(a->name, b->name)) {
free(reg_list);
}
+ *combined_list = local_list;
+ *combined_list_size = local_list_size;
return ERROR_OK;
}