$NetBSD: patch-aj,v 1.1 2011/01/26 00:16:32 wiz Exp $

Fix build with png-1.5.

--- lib/common/readPNG.c.orig	1998-11-16 22:56:19.000000000 +0000
+++ lib/common/readPNG.c
@@ -132,7 +132,11 @@ my_png_error(png_structp png_ptr, String
 
 	_XmHTMLWarning(__WFUNC__(NULL, "png_error"), XMHTML_MSG_121, "png",
 		ib->file, msg);
+#if (PNG_LIBPNG_VER < 10500)
 	longjmp(png_ptr->jmpbuf, 1);
+#else
+	png_longjmp(png_ptr, 1);
+#endif
 }
 
 /*****
@@ -189,6 +193,10 @@ _XmHTMLReadPNG(Widget html, ImageBuffer 
 	png_bytep *row_ptrs;
 	char msg[128];
 	static XmHTMLRawImageData *img_data;
+	png_colorp palette;
+	int num_palette;
+	double png_gamma;
+	png_color_16p background;
 
 	img_data = NULL;
 	data = 0;
@@ -232,7 +240,7 @@ _XmHTMLReadPNG(Widget html, ImageBuffer 
 		return((XmHTMLRawImageData*)NULL);
 	}
 	/* now set error handler */
-	if(setjmp(png_ptr->jmpbuf))
+	if(setjmp(png_jmpbuf(png_ptr)))
 	{
 		/* 
 		* PNG signalled an error. Destroy image data, free any allocated
@@ -265,17 +273,18 @@ _XmHTMLReadPNG(Widget html, ImageBuffer 
 	ResetRawImage(img_data);
 
 	/* save width & height */
-	width  = img_data->width  = info_ptr->width;
-	height = img_data->height = info_ptr->height;
+	width  = img_data->width  = png_get_image_width(png_ptr, info_ptr);
+	height = img_data->height = png_get_image_height(png_ptr, info_ptr);
 
 	/* image depth */
-	ib->depth = info_ptr->bit_depth;
+	ib->depth = png_get_bit_depth(png_ptr, info_ptr);
 
+	png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette);
 	/* no of colors */
-	ncolors = img_data->cmapsize = info_ptr->num_palette;
+	ncolors = img_data->cmapsize = num_palette;
 
 	/* type of image */
-	color_type = info_ptr->color_type;
+	color_type = png_get_color_type(png_ptr, info_ptr);
 
 	/*
 	* The fun stuff. This is based on readPNG by Greg Roelofs as found
@@ -306,7 +315,7 @@ _XmHTMLReadPNG(Widget html, ImageBuffer 
 			* Actual image creation is postponed until the image is
 			* needed.
 			*/
-			if(info_ptr->valid & PNG_INFO_tRNS)
+			if(png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
 			{
 				_XmHTMLDebug(15, ("readPNG.c: tRNS chunk present\n"));
 				png_set_expand(png_ptr);
@@ -319,9 +328,9 @@ _XmHTMLReadPNG(Widget html, ImageBuffer 
 				AllocRawImageCmap(img_data, ncolors);
 				for(i = 0; i < ncolors; i++)
 				{
-					GETR(img_data->cmap[i]) = info_ptr->palette[i].red;
-					GETG(img_data->cmap[i]) = info_ptr->palette[i].green;
-					GETB(img_data->cmap[i]) = info_ptr->palette[i].blue;
+					GETR(img_data->cmap[i]) = palette[i].red;
+					GETG(img_data->cmap[i]) = palette[i].green;
+					GETB(img_data->cmap[i]) = palette[i].blue;
 				}
 				has_cmap = True;
 				data = (Byte*)malloc(width*height*sizeof(Byte));
@@ -355,7 +364,7 @@ _XmHTMLReadPNG(Widget html, ImageBuffer 
 			* grayscale with transparency is expanded to RGB with alpha
 			* channel.
 			*/
-			if(info_ptr->valid & PNG_INFO_tRNS)
+			if(png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
 			{
 				_XmHTMLDebug(15, ("readPNG.c: tRNS chunk present\n"));
 				png_set_gray_to_rgb(png_ptr);
@@ -434,7 +443,7 @@ _XmHTMLReadPNG(Widget html, ImageBuffer 
 			break;
 		default:
 			sprintf(msg, "bad PNG image: unknown color type (%d)",
-				info_ptr->color_type);
+				png_get_color_type(png_ptr, info_ptr));
 			my_png_error(png_ptr, msg);
 			break;
 	}
@@ -444,16 +453,19 @@ _XmHTMLReadPNG(Widget html, ImageBuffer 
 	* Doing that for alpha channel images would change the colortype of the
 	* current image, leading to weird results.
 	*/
-	if(!has_alpha && info_ptr->valid & PNG_INFO_bKGD)
+	if(!has_alpha && png_get_valid(png_ptr, info_ptr, PNG_INFO_bKGD))
 	{
-		png_set_background(png_ptr, &(info_ptr->background),
+		png_get_bKGD(png_ptr, info_ptr, &background);
+		png_set_background(png_ptr, background,
 			PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
-		img_data->bg = info_ptr->background.index;
+		img_data->bg = background->index;
 	}
 
+	png_get_gAMA(png_ptr, info_ptr, &png_gamma);
+
 	/* handle gamma correction */
-	if(info_ptr->valid & PNG_INFO_gAMA)
-		fg_gamma = info_ptr->gamma;
+	if(png_get_valid(png_ptr, info_ptr, PNG_INFO_gAMA))
+		fg_gamma = png_gamma;
 	else
 		fg_gamma = 0.45;
 
@@ -464,20 +476,20 @@ _XmHTMLReadPNG(Widget html, ImageBuffer 
 	/* dithering gets handled by caller */
 
 	/* one byte per pixel */
-	if(info_ptr->bit_depth < 8)
+	if(png_get_bit_depth(png_ptr, info_ptr) < 8)
 		png_set_packing(png_ptr);
 
 	/* no tRNS chunk handling, we've expanded it to an alpha channel. */
 
 	/* handle interlacing */
-	if(info_ptr->interlace_type)
+	if(png_get_interlace_type(png_ptr, info_ptr))
 		npass = png_set_interlace_handling(png_ptr);
 
 	/* and now update everything */
 	png_read_update_info(png_ptr, info_ptr);
 
 	/* has possibly changed if we have promoted GrayScale or tRNS chunks */
-	color_type = info_ptr->color_type;
+	color_type = png_get_color_type(png_ptr, info_ptr);
 
 	/* new color_type? */
 	if(color_type == PNG_COLOR_TYPE_RGB_ALPHA)
@@ -497,10 +509,10 @@ _XmHTMLReadPNG(Widget html, ImageBuffer 
 		* will call doAlphaChannel to do the actual image creation. 
 		*/
 		row_ptrs = (png_bytep*)malloc(height*sizeof(png_bytep));
-		png_data = (png_bytep)malloc(height*info_ptr->rowbytes);
+		png_data = (png_bytep)malloc(height*png_get_rowbytes(png_ptr, info_ptr));
 
 		for(i = 0; i < height; i++)
-			row_ptrs[i] = (png_bytep)png_data + i*info_ptr->rowbytes;
+			row_ptrs[i] = (png_bytep)png_data + i*png_get_rowbytes(png_ptr, info_ptr);
 
 		/* read it */
 		png_read_image(png_ptr, row_ptrs);
@@ -529,7 +541,7 @@ _XmHTMLReadPNG(Widget html, ImageBuffer 
 	row_ptrs = (png_bytep*)malloc(height*sizeof(png_bytep));
 
 	for(i = 0; i < height; ++i)
-		row_ptrs[i] = (png_bytep)data + i*info_ptr->rowbytes;
+		row_ptrs[i] = (png_bytep)data + i*png_get_rowbytes(png_ptr, info_ptr);
 
 	/* read it */
 	png_read_image(png_ptr, row_ptrs);
