]> Pileus Git - ~andy/gtk/commitdiff
Initialise the error handler exit routine to our own. Note this means that
authorNot Zed <NotZed@HelixCode.com>
Wed, 31 May 2000 02:07:07 +0000 (02:07 +0000)
committerMichael Zucci <zucchi@src.gnome.org>
Wed, 31 May 2000 02:07:07 +0000 (02:07 +0000)
2000-05-30  Not Zed  <NotZed@HelixCode.com>

* gdk-pixbuf/io-jpeg.c (gdk_pixbuf__jpeg_image_begin_load):
Initialise the error handler exit routine to our own.  Note this
means that every function that accesses the jpeg lib on this
object MUST do a setjmp.
(gdk_pixbuf__jpeg_image_stop_load): setjmp before accessing jpeg
lib for handling fatal error.
(gdk_pixbuf__jpeg_image_load_increment): And here too.  So now
your applications dont quit if there's a jpeg error!

gdk-pixbuf/ChangeLog
gdk-pixbuf/io-jpeg.c

index 956c25ee78c56bc45c397c1c54543d499ae93b66..c5d2202492ee05e39f3593f87d39e2a47cbdd4de 100644 (file)
@@ -1,3 +1,14 @@
+2000-05-30  Not Zed  <NotZed@HelixCode.com>
+
+       * gdk-pixbuf/io-jpeg.c (gdk_pixbuf__jpeg_image_begin_load):
+       Initialise the error handler exit routine to our own.  Note this
+       means that every function that accesses the jpeg lib on this
+       object MUST do a setjmp.
+       (gdk_pixbuf__jpeg_image_stop_load): setjmp before accessing jpeg
+       lib for handling fatal error.
+       (gdk_pixbuf__jpeg_image_load_increment): And here too.  So now
+       your applications dont quit if there's a jpeg error!
+
 2000-05-30  Federico Mena Quintero  <federico@helixcode.com>
 
        * gdk-pixbuf.spec.in: Include all the loader libraries.  Patch
index 0a2126925247cf337259c0f44bf08a6b38390fe0..ed3ee2ac8e444b25af7e3e4b4f1b4c95fec3c984 100644 (file)
@@ -108,7 +108,9 @@ fatal_error_handler (j_common_ptr cinfo)
        errmgr = (struct error_handler_data *) cinfo->err;
        cinfo->err->output_message (cinfo);
        siglongjmp (errmgr->setjmp_buffer, 1);
-       return;
+
+       /* incase the jmp buf isn't initted? */
+       exit(1);
 }
 
 /* Destroy notification function for the pixbuf */
@@ -300,6 +302,7 @@ gdk_pixbuf__jpeg_image_begin_load (ModulePreparedNotifyFunc prepared_func,
        src = (my_src_ptr) context->cinfo.src;
 
        context->cinfo.err = jpeg_std_error (&context->jerr.pub);
+       context->jerr.pub.error_exit = fatal_error_handler;
 
        src = (my_src_ptr) context->cinfo.src;
        src->pub.init_source = init_source;
@@ -328,8 +331,13 @@ gdk_pixbuf__jpeg_image_stop_load (gpointer data)
        if (context->pixbuf)
                gdk_pixbuf_unref (context->pixbuf);
 
-       jpeg_finish_decompress(&context->cinfo);
-       jpeg_destroy_decompress(&context->cinfo);
+       /* if we have an error? */
+       if (sigsetjmp (context->jerr.setjmp_buffer, 1)) {
+               jpeg_destroy_decompress (&context->cinfo);
+       } else {
+               jpeg_finish_decompress(&context->cinfo);
+               jpeg_destroy_decompress(&context->cinfo);
+       }
 
        if (context->cinfo.src) {
                my_src_ptr src = (my_src_ptr) context->cinfo.src;
@@ -373,6 +381,10 @@ gdk_pixbuf__jpeg_image_load_increment (gpointer data, guchar *buf, guint size)
          *                    have a grasp of what the flow needs to be!
          */
 
+       /* check for fatal error */
+       if (sigsetjmp (context->jerr.setjmp_buffer, 1)) {
+               return FALSE;
+       }
 
        /* skip over data if requested, handle unsigned int sizes cleanly */
        /* only can happen if we've already called jpeg_get_header once   */