static int compare_section (const void * a, const void * b)
{
- struct imageection *b1, *b2;
- b1=*((struct imageection **)a);
- b2=*((struct imageection **)b);
+ struct imagesection *b1, *b2;
+ b1=*((struct imagesection **)a);
+ b2=*((struct imagesection **)b);
if (b1->base_address == b2->base_address)
{
/* This fn requires all sections to be in ascending order of addresses,
* whereas an image can have sections out of order. */
- struct imageection **sections = malloc(sizeof(struct imageection *) *
+ struct imagesection **sections = malloc(sizeof(struct imagesection *) *
image->num_sections);
int i;
for (i = 0; i < image->num_sections; i++)
sections[i] = &image->sections[i];
}
- qsort(sections, image->num_sections, sizeof(struct imageection *),
+ qsort(sections, image->num_sections, sizeof(struct imagesection *),
compare_section);
/* loop until we reach end of the image */
/* find the corresponding flash bank */
retval = get_flash_bank_by_addr(target, run_address, false, &c);
if (retval != ERROR_OK)
- return retval;
+ {
+ goto done;
+ }
if (c == NULL)
{
section++; /* and skip it */
if (run_address + run_size - 1 > c->base + c->size - 1)
{
LOG_ERROR("The image is too big for the flash");
- return ERROR_FAIL;
+ retval = ERROR_FAIL;
+ goto done;
}
/* If we're applying any sector automagic, then pad this
/* allocate buffer */
buffer = malloc(run_size);
+ if (buffer == NULL)
+ {
+ LOG_ERROR("Out of memory for flash bank buffer");
+ retval = ERROR_FAIL;
+ goto done;
+ }
buffer_size = 0;
/* read sections to the buffer */
* list of pointers to sections to invoke image_read_section()...
*/
intptr_t diff = (intptr_t)sections[section] - (intptr_t)image->sections;
- int t_section_num = diff / sizeof(struct imageection);
+ int t_section_num = diff / sizeof(struct imagesection);
LOG_DEBUG("image_read_section: section = %d, t_section_num = %d, section_offset = %d, buffer_size = %d, size_read = %d",
(int)section,