cvs: gd /libgd/src gd_png.c

[email protected] ("Takeshi Abe") Tue, 31 Mar 2009 16:17:23 -0000
Newsgroups php.gd.cvs
Message-ID <cvstabe1238516243@cvsserver>
tabe		Tue Mar 31 16:17:23 2009 UTC

  Modified files:              
    /gd/libgd/src	gd_png.c 
  Log:
  replaced static gdPngJmpbufStruct, which is afraid of being shared with
  several threads, by a couple of auto variables.
  
  
http://cvs.php.net/viewvc.cgi/gd/libgd/src/gd_png.c?r1=1.31&r2=1.32&diff_format=u
Index: gd/libgd/src/gd_png.c
diff -u gd/libgd/src/gd_png.c:1.31 gd/libgd/src/gd_png.c:1.32
--- gd/libgd/src/gd_png.c:1.31	Sat Mar 14 04:57:31 2009
+++ gd/libgd/src/gd_png.c	Tue Mar 31 16:17:23 2009
@@ -1,4 +1,4 @@
-/* $Id: gd_png.c,v 1.31 2009/03/14 04:57:31 tabe Exp $ */
+/* $Id: gd_png.c,v 1.32 2009/03/31 16:17:23 tabe Exp $ */
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -41,15 +41,13 @@
 
   ---------------------------------------------------------------------------*/
 
-#ifndef PNG_SETJMP_NOT_SUPPORTED
+#ifdef PNG_SETJMP_SUPPORTED
 typedef struct _jmpbuf_wrapper
 {
 	jmp_buf jmpbuf;
 }
 jmpbuf_wrapper;
 
-static jmpbuf_wrapper gdPngJmpbufStruct;
-
 	static void
 gdPngErrorHandler (png_structp png_ptr, png_const_charp msg)
 {
@@ -125,6 +123,9 @@
 BGD_DECLARE(gdImagePtr) gdImageCreateFromPngCtx (gdIOCtx * infile)
 {
 	png_byte sig[8];
+#ifdef PNG_SETJMP_SUPPORTED
+	jmpbuf_wrapper jbw;
+#endif
 	png_structp png_ptr;
 	png_infop info_ptr;
 	png_uint_32 width, height, rowbytes, w, h, res_x, res_y;
@@ -155,8 +156,8 @@
 		return NULL;		/* bad signature */
 	}
 
-#ifndef PNG_SETJMP_NOT_SUPPORTED
-	png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, &gdPngJmpbufStruct, gdPngErrorHandler, NULL);
+#ifdef PNG_SETJMP_SUPPORTED
+	png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, &jbw, gdPngErrorHandler, NULL);
 #else
 	png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
 #endif
@@ -180,8 +181,8 @@
 
 	/* setjmp() must be called in every non-callback function that calls a
 	 * PNG-reading libpng function */
-#ifndef PNG_SETJMP_NOT_SUPPORTED
-	if (setjmp (gdPngJmpbufStruct.jmpbuf)) {
+#ifdef PNG_SETJMP_SUPPORTED
+	if (setjmp(jbw.jmpbuf)) {
 		fprintf (stderr, "gd-png error: setjmp returns error condition 1\n");
 		png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
 
@@ -204,8 +205,6 @@
 	if (im == NULL) {
 		fprintf (stderr, "gd-png error: cannot allocate gdImage struct\n");
 		png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
-		gdFree (image_data);
-		gdFree (row_pointers);
 
 		return NULL;
 	}
@@ -219,8 +218,8 @@
 	/* setjmp() must be called in every non-callback function that calls a
 	 * PNG-reading libpng function
 	 */
-#ifndef PNG_SETJMP_NOT_SUPPORTED
-	if (setjmp(gdPngJmpbufStruct.jmpbuf)) {
+#ifdef PNG_SETJMP_SUPPORTED
+	if (setjmp(jbw.jmpbuf)) {
 		fprintf(stderr, "gd-png error: setjmp returns error condition 2\n");
 		png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
 		gdFree(image_data);
@@ -524,10 +523,11 @@
 	png_infop info_ptr;
 	volatile int transparent = im->transparent;
 	volatile int remap = FALSE;
+#ifdef PNG_SETJMP_SUPPORTED
+	jmpbuf_wrapper jbw;
 
-#ifndef PNG_SETJMP_NOT_SUPPORTED
 	png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING,
-			&gdPngJmpbufStruct, gdPngErrorHandler,
+			&jbw, gdPngErrorHandler,
 			NULL);
 #else
 	png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
@@ -546,8 +546,8 @@
 		return;
 	}
 
-#ifndef PNG_SETJMP_NOT_SUPPORTED
-	if (setjmp (gdPngJmpbufStruct.jmpbuf))
+#ifdef PNG_SETJMP_SUPPORTED
+	if (setjmp(jbw.jmpbuf))
 	{
 		fprintf (stderr, "gd-png error: setjmp returns error condition\n");
 		png_destroy_write_struct (&png_ptr, &info_ptr);