$OpenBSD: patch-src_util_png_c,v 1.1 2011/07/08 20:36:09 naddy Exp $

Fix build with png-1.5.

--- src/util/png.c.orig	Wed Jul  6 14:19:33 2011
+++ src/util/png.c	Wed Jul  6 14:37:05 2011
@@ -3,6 +3,7 @@
 #include <aconfig.h>
 #ifdef USE_PNG
 #include <png.h>
+#include <zlib.h>
 #endif
 #include <stdlib.h>
 #include <stdio.h>
@@ -31,6 +32,9 @@ CONST char *writepng(FILE * file, CONST struct image *
     png_structp png_ptr;
     png_infop info_ptr;
     png_color palette[256];
+    png_color_8 sig_bit;
+    int color_type;
+    int bit_depth;
     volatile unsigned short a = 255;
     volatile unsigned char *b = (volatile unsigned char *) &a;
 #ifdef _undefined_
@@ -59,7 +63,7 @@ CONST char *writepng(FILE * file, CONST struct image *
 	png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
 	return "No memory to create png info structure";
     }
-    if (setjmp(png_ptr->jmpbuf)) {
+    if (setjmp(png_jmpbuf(png_ptr))) {
 	png_destroy_write_struct(&png_ptr, &info_ptr);
 	fclose(file);
 	return strerror(errno);
@@ -78,57 +82,71 @@ CONST char *writepng(FILE * file, CONST struct image *
     png_set_compression_window_bits(png_ptr, 15);
     png_set_compression_method(png_ptr, 8);
 
-    info_ptr->width = image->width;
-    info_ptr->height = image->height;
-    /*info_ptr->gamma=1.0; */
-    info_ptr->gamma = 0.5;
-    info_ptr->valid |= PNG_INFO_gAMA | PNG_INFO_pHYs;
-    info_ptr->x_pixels_per_unit = (png_uint_32) (100 / image->pixelwidth);
-    info_ptr->y_pixels_per_unit = (png_uint_32) (100 / image->pixelheight);
+    switch (image->palette->type)
+      {
+      case C256:
+	color_type = PNG_COLOR_TYPE_PALETTE;
+	bit_depth = image->bytesperpixel * 8;
+	break;
+      case SMALLITER:
+      case LARGEITER:
+      case GRAYSCALE:
+	color_type = PNG_COLOR_TYPE_GRAY;
+	bit_depth = image->bytesperpixel * 8;
+	break;
+      case TRUECOLOR:
+      case TRUECOLOR24:
+      case TRUECOLOR16:
+	color_type = PNG_COLOR_TYPE_RGB;
+	bit_depth = 8;
+	break;
+      }
+ 
+    png_set_IHDR (png_ptr, info_ptr, image->width, image->height, bit_depth,
+      color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,
+      PNG_FILTER_TYPE_BASE);
 
-
     switch (image->palette->type) {
     case C256:
 	{
 	    int i;
-	    info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
-	    info_ptr->bit_depth = image->bytesperpixel * 8;
-	    info_ptr->palette = palette;
-	    info_ptr->valid |= PNG_INFO_PLTE;
+	    png_color png_palette[257];
+	    int png_num_palette;
 	    for (i = 0; i < image->palette->end; i++)
-		info_ptr->palette[i].red = image->palette->rgb[i][0],
-		    info_ptr->palette[i].green = image->palette->rgb[i][1],
-		    info_ptr->palette[i].blue = image->palette->rgb[i][2],
-		    info_ptr->num_palette = image->palette->end;
+		png_palette[i].red = image->palette->rgb[i][0],
+		    png_palette[i].green = image->palette->rgb[i][1],
+		    png_palette[i].blue = image->palette->rgb[i][2],
+		    png_num_palette = image->palette->end;
+	    png_set_PLTE(png_ptr, info_ptr, png_palette, png_num_palette);
 	}
 	break;
-    case SMALLITER:
-    case LARGEITER:
-    case GRAYSCALE:
-	info_ptr->color_type = PNG_COLOR_TYPE_GRAY;
-	info_ptr->bit_depth = image->bytesperpixel * 8;
-	break;
     case TRUECOLOR:
     case TRUECOLOR24:
     case TRUECOLOR16:
-	info_ptr->color_type = PNG_COLOR_TYPE_RGB;
-	info_ptr->bit_depth = 8;
-	info_ptr->sig_bit.red = 8 - image->palette->info.truec.rprec;
-	info_ptr->sig_bit.green = 8 - image->palette->info.truec.gprec;
-	info_ptr->sig_bit.blue = 8 - image->palette->info.truec.bprec;
+	{
+	    sig_bit.red = 8 - image->palette->info.truec.rprec;
+	    sig_bit.green = 8 - image->palette->info.truec.gprec;
+	    sig_bit.blue = 8 - image->palette->info.truec.bprec;
+	    png_set_sBIT(png_ptr, info_ptr, &sig_bit);
+	}
 	break;
     }
-    info_ptr->interlace_type = 0;
+
+    png_write_info (png_ptr, info_ptr);
+
 #ifdef _undefined_
     png_set_text(png_ptr, info_ptr, comments,
 		 sizeof(comments) / sizeof(png_text));
 #endif
 
-    png_write_info(png_ptr, info_ptr);
+    png_set_gAMA(png_ptr, info_ptr, 0.5 /* 1.0 */);
+    png_set_pHYs(png_ptr, info_ptr, (png_uint_32) (100 / image->pixelwidth),
+        (png_uint_32) (100 / image->pixelheight), PNG_RESOLUTION_UNKNOWN);
+
     /*png_set_filler(png_ptr,0,PNG_FILLER_AFTER); */
     png_set_packing(png_ptr);
     if (image->palette->type & (TRUECOLOR | TRUECOLOR24 | TRUECOLOR16))
-	png_set_shift(png_ptr, &(info_ptr->sig_bit));
+	png_set_shift(png_ptr, &sig_bit);
     if (*b == 255)
 	png_set_swap(png_ptr);
     png_set_bgr(png_ptr);
