Browse Source

[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.
tags/v0.9.4
Michael Brown 16 years ago
parent
commit
14c080020f
1 changed files with 10 additions and 1 deletions
  1. 10
    1
      src/core/image.c

+ 10
- 1
src/core/image.c View File

156
 struct image * find_image ( const char *name ) {
156
 struct image * find_image ( const char *name ) {
157
 	struct image *image;
157
 	struct image *image;
158
 
158
 
159
-	list_for_each_entry ( image, &images, list ) {
159
+	for_each_image ( image ) {
160
 		if ( strcmp ( image->name, name ) == 0 )
160
 		if ( strcmp ( image->name, name ) == 0 )
161
 			return image;
161
 			return image;
162
 	}
162
 	}
172
  * @ret rc		Return status code
172
  * @ret rc		Return status code
173
  */
173
  */
174
 static int image_load_type ( struct image *image, struct image_type *type ) {
174
 static int image_load_type ( struct image *image, struct image_type *type ) {
175
+	struct image *tmp_image;
175
 	int rc;
176
 	int rc;
176
 
177
 
177
 	/* Check image is actually loadable */
178
 	/* Check image is actually loadable */
178
 	if ( ! type->load )
179
 	if ( ! type->load )
179
 		return -ENOEXEC;
180
 		return -ENOEXEC;
180
 
181
 
182
+	/* Clear the loaded flag on all images; loading this image
183
+	 * will invalidate any previous loads.  (Even if loading
184
+	 * fails, the previously loaded image may still have been
185
+	 * partially overwritten.)
186
+	 */
187
+	for_each_image ( tmp_image )
188
+		tmp_image->flags &= ~IMAGE_LOADED;
189
+
181
 	/* Try the image loader */
190
 	/* Try the image loader */
182
 	if ( ( rc = type->load ( image ) ) != 0 ) {
191
 	if ( ( rc = type->load ( image ) ) != 0 ) {
183
 		DBGC ( image, "IMAGE %p could not load as %s: %s\n",
192
 		DBGC ( image, "IMAGE %p could not load as %s: %s\n",

Loading…
Cancel
Save