summaryrefslogtreecommitdiff
path: root/gdk-pixbuf/gdk-pixbuf-loader.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2006-07-17 02:37:29 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2006-07-17 02:37:29 +0000
commit874fce47232807385a9cc366820dffcea7176a50 (patch)
tree5a4eb76d7640387303f6a0905a7a52e6e941b47a /gdk-pixbuf/gdk-pixbuf-loader.c
parentfc63370a3e3e33b706c20815918298bcfbf9c306 (diff)
downloadgdk-pixbuf-874fce47232807385a9cc366820dffcea7176a50.tar.gz
Put the code to protect against broken loaders that forget to set error in
2006-07-16 Matthias Clasen <mclasen@redhat.com> * gdk-pixbuf-loader.c (gdk_pixbuf_loader_load_module) (gdk_pixbuf_loader_write, gdk_pixbuf_loader_close) (gdk_pixbuf_loader_ensure_error): Put the code to protect against broken loaders that forget to set error in an auxiliary function and call it in more places. (#346428, Catmur)
Diffstat (limited to 'gdk-pixbuf/gdk-pixbuf-loader.c')
-rw-r--r--gdk-pixbuf/gdk-pixbuf-loader.c64
1 files changed, 32 insertions, 32 deletions
diff --git a/gdk-pixbuf/gdk-pixbuf-loader.c b/gdk-pixbuf/gdk-pixbuf-loader.c
index 86702c91e..b03f06e83 100644
--- a/gdk-pixbuf/gdk-pixbuf-loader.c
+++ b/gdk-pixbuf/gdk-pixbuf-loader.c
@@ -303,6 +303,27 @@ gdk_pixbuf_loader_update (GdkPixbuf *pixbuf,
MIN (height, gdk_pixbuf_animation_get_height (priv->animation)));
}
+/* Defense against broken loaders; DO NOT take this as a GError example! */
+static void
+gdk_pixbuf_loader_ensure_error (GdkPixbufLoader *loader,
+ GError **error)
+{
+ GdkPixbufLoaderPrivate *priv = loader->priv;
+
+ if (error == NULL || *error != NULL)
+ return;
+
+ g_warning ("Bug! loader '%s' didn't set an error on failure",
+ priv->image_module->module_name);
+ g_set_error (error,
+ GDK_PIXBUF_ERROR,
+ GDK_PIXBUF_ERROR_FAILED,
+ _("Internal error: Image loader module '%s' failed to"
+ " complete an operation, but didn't give a reason for"
+ " the failure"),
+ priv->image_module->module_name);
+}
+
static gint
gdk_pixbuf_loader_load_module (GdkPixbufLoader *loader,
const char *image_type,
@@ -358,23 +379,7 @@ gdk_pixbuf_loader_load_module (GdkPixbufLoader *loader,
if (priv->context == NULL)
{
- /* Defense against broken loaders; DO NOT take this as a GError
- * example
- */
- if (error && *error == NULL)
- {
- g_warning ("Bug! loader '%s' didn't set an error on failure",
- priv->image_module->module_name);
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_FAILED,
- _("Internal error: Image loader module '%s'"
- " failed to begin loading an image, but didn't"
- " give a reason for the failure"),
- priv->image_module->module_name);
-
- }
-
+ gdk_pixbuf_loader_ensure_error (loader, error);
return 0;
}
@@ -450,7 +455,10 @@ gdk_pixbuf_loader_write (GdkPixbufLoader *loader,
eaten = gdk_pixbuf_loader_eat_header_write (loader, buf, count, error);
if (eaten <= 0)
- return FALSE;
+ {
+ gdk_pixbuf_loader_ensure_error (loader, error);
+ return FALSE;
+ }
count -= eaten;
buf += eaten;
@@ -461,19 +469,8 @@ gdk_pixbuf_loader_write (GdkPixbufLoader *loader,
gboolean retval;
retval = priv->image_module->load_increment (priv->context, buf, count,
error);
- if (!retval && error && *error == NULL)
- {
- /* Fix up busted image loader */
- g_warning ("Bug! loader '%s' didn't set an error on failure",
- priv->image_module->module_name);
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_FAILED,
- _("Internal error: Image loader module '%s'"
- " failed to begin loading an image, but didn't"
- " give a reason for the failure"),
- priv->image_module->module_name);
- }
+ if (!retval)
+ gdk_pixbuf_loader_ensure_error (loader, error);
return retval;
}
@@ -716,7 +713,10 @@ gdk_pixbuf_loader_close (GdkPixbufLoader *loader,
if (priv->image_module && priv->image_module->stop_load && priv->context)
{
if (!priv->image_module->stop_load (priv->context, error))
- retval = FALSE;
+ {
+ gdk_pixbuf_loader_ensure_error (loader, error);
+ retval = FALSE;
+ }
}
priv->closed = TRUE;