Merge remote branch 'origin/master' into HEAD
[fw/openocd] / src / target / image.c
index ca7123adc37947c3adb2bb819a72cef8c9100aa3..454fc6c183baa8ed8e4f1de039c5dbd11989150e 100644 (file)
@@ -32,7 +32,7 @@
 
 #include "image.h"
 #include "target.h"
-#include "log.h"
+#include <helper/log.h>
 
 
 /* convert ELF header field to host endianness */
@@ -147,7 +147,7 @@ static int identify_image_type(struct image *image, const char *type_string, con
        return ERROR_OK;
 }
 
-static int image_ihex_buffer_complete_inner(struct image *image, char *lpszLine, struct imageection *section)
+static int image_ihex_buffer_complete_inner(struct image *image, char *lpszLine, struct imagesection *section)
 {
        struct image_ihex *ihex = image->type_private;
        struct fileio *fileio = &ihex->fileio;
@@ -158,7 +158,13 @@ static int image_ihex_buffer_complete_inner(struct image *image, char *lpszLine,
        /* we can't determine the number of sections that we'll have to create ahead of time,
         * so we locally hold them until parsing is finished */
 
-       ihex->buffer = malloc(fileio->size >> 1);
+       int filesize;
+       int retval;
+       retval = fileio_size(fileio, &filesize);
+       if (retval != ERROR_OK)
+               return retval;
+
+       ihex->buffer = malloc(filesize >> 1);
        cooked_bytes = 0x0;
        image->num_sections = 0;
        section[image->num_sections].private = &ihex->buffer[cooked_bytes];
@@ -230,7 +236,7 @@ static int image_ihex_buffer_complete_inner(struct image *image, char *lpszLine,
                        image->num_sections++;
 
                        /* copy section information */
-                       image->sections = malloc(sizeof(struct imageection) * image->num_sections);
+                       image->sections = malloc(sizeof(struct imagesection) * image->num_sections);
                        for (i = 0; i < image->num_sections; i++)
                        {
                                image->sections[i].private = section[i].private;
@@ -367,7 +373,7 @@ static int image_ihex_buffer_complete(struct image *image)
                LOG_ERROR("Out of memory");
                return ERROR_FAIL;
        }
-       struct imageection *section = malloc(sizeof(struct imageection) * IMAGE_MAX_SECTIONS);
+       struct imagesection *section = malloc(sizeof(struct imagesection) * IMAGE_MAX_SECTIONS);
        if (section == NULL)
        {
                free(lpszLine);
@@ -425,7 +431,7 @@ static int image_elf_read_headers(struct image *image)
        if ((elf->endianness != ELFDATA2LSB)
                 &&(elf->endianness != ELFDATA2MSB))
        {
-               LOG_ERROR("invalid ELF file, unknown endianess setting");
+               LOG_ERROR("invalid ELF file, unknown endianness setting");
                return ERROR_IMAGE_FORMAT_ERROR;
        }
 
@@ -466,7 +472,7 @@ static int image_elf_read_headers(struct image *image)
                if ((field32(elf, elf->segments[i].p_type) == PT_LOAD) && (field32(elf, elf->segments[i].p_filesz) != 0))
                        image->num_sections++;
        /* alloc and fill sections array with loadable segments */
-       image->sections = malloc(image->num_sections * sizeof(struct imageection));
+       image->sections = malloc(image->num_sections * sizeof(struct imagesection));
        for (i = 0,j = 0;i < elf->segment_count;i++)
        {
                if ((field32(elf, elf->segments[i].p_type) == PT_LOAD) && (field32(elf, elf->segments[i].p_filesz) != 0))
@@ -526,7 +532,7 @@ static int image_elf_read_section(struct image *image, int section, uint32_t off
        return ERROR_OK;
 }
 
-static int image_mot_buffer_complete_inner(struct image *image, char *lpszLine, struct imageection *section)
+static int image_mot_buffer_complete_inner(struct image *image, char *lpszLine, struct imagesection *section)
 {
        struct image_mot *mot = image->type_private;
        struct fileio *fileio = &mot->fileio;
@@ -537,7 +543,13 @@ static int image_mot_buffer_complete_inner(struct image *image, char *lpszLine,
        /* we can't determine the number of sections that we'll have to create ahead of time,
         * so we locally hold them until parsing is finished */
 
-       mot->buffer = malloc(fileio->size >> 1);
+       int retval;
+       int filesize;
+       retval = fileio_size(fileio, &filesize);
+       if (retval != ERROR_OK)
+               return retval;
+
+       mot->buffer = malloc(filesize >> 1);
        cooked_bytes = 0x0;
        image->num_sections = 0;
        section[image->num_sections].private = &mot->buffer[cooked_bytes];
@@ -660,7 +672,7 @@ static int image_mot_buffer_complete_inner(struct image *image, char *lpszLine,
                        image->num_sections++;
 
                        /* copy section information */
-                       image->sections = malloc(sizeof(struct imageection) * image->num_sections);
+                       image->sections = malloc(sizeof(struct imagesection) * image->num_sections);
                        for (i = 0; i < image->num_sections; i++)
                        {
                                image->sections[i].private = section[i].private;
@@ -706,7 +718,7 @@ static int image_mot_buffer_complete(struct image *image)
                LOG_ERROR("Out of memory");
                return ERROR_FAIL;
        }
-       struct imageection *section = malloc(sizeof(struct imageection) * IMAGE_MAX_SECTIONS);
+       struct imagesection *section = malloc(sizeof(struct imagesection) * IMAGE_MAX_SECTIONS);
        if (section == NULL)
        {
                free(lpszLine);
@@ -743,11 +755,18 @@ int image_open(struct image *image, const char *url, const char *type_string)
                {
                        return retval;
                }
+               int filesize;
+               retval = fileio_size(&image_binary->fileio, &filesize);
+               if (retval != ERROR_OK)
+               {
+                       fileio_close(&image_binary->fileio);
+                       return retval;
+               }
 
                image->num_sections = 1;
-               image->sections = malloc(sizeof(struct imageection));
+               image->sections = malloc(sizeof(struct imagesection));
                image->sections[0].base_address = 0x0;
-               image->sections[0].size = image_binary->fileio.size;
+               image->sections[0].size = filesize;
                image->sections[0].flags = 0;
        }
        else if (image->type == IMAGE_IHEX)
@@ -798,7 +817,7 @@ int image_open(struct image *image, const char *url, const char *type_string)
                struct image_memory *image_memory;
 
                image->num_sections = 1;
-               image->sections = malloc(sizeof(struct imageection));
+               image->sections = malloc(sizeof(struct imagesection));
                image->sections[0].base_address = 0x0;
                image->sections[0].size = 0xffffffff;
                image->sections[0].flags = 0;
@@ -954,7 +973,7 @@ int image_read_section(struct image *image, int section, uint32_t offset, uint32
 
 int image_add_section(struct image *image, uint32_t base, uint32_t size, int flags, uint8_t *data)
 {
-       struct imageection *section;
+       struct imagesection *section;
 
        /* only image builder supports adding sections */
        if (image->type != IMAGE_BUILDER)
@@ -978,7 +997,7 @@ int image_add_section(struct image *image, uint32_t base, uint32_t size, int fla
 
        /* allocate new section */
        image->num_sections++;
-       image->sections = realloc(image->sections, sizeof(struct imageection) * image->num_sections);
+       image->sections = realloc(image->sections, sizeof(struct imagesection) * image->num_sections);
        section = &image->sections[image->num_sections - 1];
        section->base_address = base;
        section->size = size;