From 14c080020fb37cb34fe74213393f47bd2ad8b9bc Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 8 Jul 2008 03:03:48 +0100 Subject: [PATCH] [image] Clear LOADED flag on all other images when loading a new image Loading an image may overwrite part or all of any previously-loaded images, so we should clear the LOADED flag for all images prior to attempting to load a new image. --- src/core/image.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/core/image.c b/src/core/image.c index 440a68c9f..d896be0e9 100644 --- a/src/core/image.c +++ b/src/core/image.c @@ -156,7 +156,7 @@ void unregister_image ( struct image *image ) { struct image * find_image ( const char *name ) { struct image *image; - list_for_each_entry ( image, &images, list ) { + for_each_image ( image ) { if ( strcmp ( image->name, name ) == 0 ) return image; } @@ -172,12 +172,21 @@ struct image * find_image ( const char *name ) { * @ret rc Return status code */ static int image_load_type ( struct image *image, struct image_type *type ) { + struct image *tmp_image; int rc; /* Check image is actually loadable */ if ( ! type->load ) return -ENOEXEC; + /* Clear the loaded flag on all images; loading this image + * will invalidate any previous loads. (Even if loading + * fails, the previously loaded image may still have been + * partially overwritten.) + */ + for_each_image ( tmp_image ) + tmp_image->flags &= ~IMAGE_LOADED; + /* Try the image loader */ if ( ( rc = type->load ( image ) ) != 0 ) { DBGC ( image, "IMAGE %p could not load as %s: %s\n",