Commit ea39d557 authored by Masahiro Yamada's avatar Masahiro Yamada
Browse files

fiptool: revive replace_image() to keep the image order by update command

Commit e0f083a0

 ("fiptool: Prepare ground for expanding the set
of images at runtime") introduced another side effect; the "update"
command now changes the image order in the FIP.

Let's say you have an FIP with BL2, BL31, BL32, BL33.  If you update
for example, BL32 with the "update" command, you will get a new FIP
with BL2, BL31, BL33, BL32, in this order.

It happens like this; remove_image() removes the old image from the
linked list, add_image() adds the new image at the tail of the list,
then images are packed in the new order.  Prior to that commit,
images were updated by replace_image(), but it was deleted by the
re-work.  Revive replace_image() that is re-implemented to work with
the linked list.
Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
parent 67973fb4
...@@ -254,6 +254,22 @@ static void add_image(image_t *image) ...@@ -254,6 +254,22 @@ static void add_image(image_t *image)
nr_images++; nr_images++;
} }
static void replace_image(image_t *image)
{
image_t **p = &image_head;
while (*p) {
if (!memcmp(&(*p)->uuid, &image->uuid, sizeof(image->uuid)))
break;
p = &(*p)->next;
}
assert(*p != NULL);
image->next = (*p)->next;
*p = image;
}
static void free_image(image_t *image) static void free_image(image_t *image)
{ {
free(image->buffer); free(image->buffer);
...@@ -673,8 +689,7 @@ static void update_fip(void) ...@@ -673,8 +689,7 @@ static void update_fip(void)
desc->cmdline_name, desc->cmdline_name,
desc->action_arg); desc->action_arg);
} }
remove_image(old_image); replace_image(new_image);
add_image(new_image);
} else { } else {
if (verbose) if (verbose)
log_dbgx("Adding image %s", log_dbgx("Adding image %s",
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment