Imported from libpng-0.87.tar
diff --git a/pngread.c b/pngread.c
index f0b363c..9e00833 100644
--- a/pngread.c
+++ b/pngread.c
@@ -1,10 +1,10 @@
 
 /* pngread.c - read a png file
 
-	libpng 1.0 beta 2 - version 0.86
+   libpng 1.0 beta 2 - version 0.87
    For conditions of distribution and use, see copyright notice in png.h
-	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
-   January 10, 1996
+   Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
+   January 15, 1996
    */
 
 #define PNG_INTERNAL
@@ -14,30 +14,30 @@
 void
 png_read_init(png_structp png_ptr)
 {
-	jmp_buf tmp_jmp;
-	png_msg_ptr error_fn;
-	png_msg_ptr warning_fn;
-	png_voidp msg_ptr;
+   jmp_buf tmp_jmp;
+   png_msg_ptr error_fn;
+   png_msg_ptr warning_fn;
+   png_voidp msg_ptr;
 
-	png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
-	error_fn = png_ptr->error_fn;
-	warning_fn = png_ptr->warning_fn;
-	msg_ptr = png_ptr->msg_ptr;
+   png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
+   error_fn = png_ptr->error_fn;
+   warning_fn = png_ptr->warning_fn;
+   msg_ptr = png_ptr->msg_ptr;
 
-	png_memset(png_ptr, 0, sizeof (png_struct));
+   png_memset(png_ptr, 0, sizeof (png_struct));
 
-	png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
-	png_ptr->error_fn = error_fn;
-	png_ptr->warning_fn = warning_fn;
-	png_ptr->msg_ptr = msg_ptr;
+   png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
+   png_ptr->error_fn = error_fn;
+   png_ptr->warning_fn = warning_fn;
+   png_ptr->msg_ptr = msg_ptr;
 
    png_ptr->zbuf_size = PNG_ZBUF_SIZE;
    png_ptr->zbuf = png_large_malloc(png_ptr, png_ptr->zbuf_size);
-	png_ptr->zstream = (z_stream *)png_malloc(png_ptr, sizeof (z_stream));
-	png_ptr->zstream->zalloc = png_zalloc;
+   png_ptr->zstream = (z_stream *)png_malloc(png_ptr, sizeof (z_stream));
+   png_ptr->zstream->zalloc = png_zalloc;
    png_ptr->zstream->zfree = png_zfree;
-   png_ptr->zstream->opaque = (voidp)png_ptr;
-	inflateInit(png_ptr->zstream);
+   png_ptr->zstream->opaque = (voidpf)png_ptr;
+   inflateInit(png_ptr->zstream);
    png_ptr->zstream->next_out = png_ptr->zbuf;
    png_ptr->zstream->avail_out = (uInt)png_ptr->zbuf_size;
 }
@@ -63,7 +63,7 @@
       png_calculate_crc(png_ptr, chunk_start + 4, 4);
       if (!png_memcmp(chunk_start + 4, png_IHDR, 4))
       {
-			if (png_ptr->mode != PNG_BEFORE_IHDR)
+         if (png_ptr->mode != PNG_BEFORE_IHDR)
             png_error(png_ptr, "Out of Place IHDR");
 
          png_handle_IHDR(png_ptr, info, length);
@@ -81,7 +81,7 @@
 #else
          {
             png_handle_PLTE(png_ptr, info, length);
-			}
+         }
 #endif
          png_ptr->mode = PNG_HAVE_PLTE;
       }
@@ -99,7 +99,7 @@
       else if (!png_memcmp(chunk_start + 4, png_gAMA, 4))
       {
          if (png_ptr->mode != PNG_HAVE_IHDR)
-				png_error(png_ptr, "Out of Place PLTE");
+            png_error(png_ptr, "Out of Place PLTE");
 
          png_handle_gAMA(png_ptr, info, length);
       }
@@ -117,7 +117,7 @@
       else if (!png_memcmp(chunk_start + 4, png_cHRM, 4))
       {
          if (png_ptr->mode != PNG_HAVE_IHDR)
-				png_error(png_ptr, "Out of Place cHRM");
+            png_error(png_ptr, "Out of Place cHRM");
 
          png_handle_cHRM(png_ptr, info, length);
       }
@@ -135,7 +135,7 @@
 #if defined(PNG_READ_bKGD_SUPPORTED)
       else if (!png_memcmp(chunk_start + 4, png_bKGD, 4))
       {
-			if (png_ptr->mode != PNG_HAVE_IHDR &&
+         if (png_ptr->mode != PNG_HAVE_IHDR &&
             png_ptr->mode != PNG_HAVE_PLTE)
             png_error(png_ptr, "Out of Place bKGD");
 
@@ -153,7 +153,7 @@
 #endif
 #if defined(PNG_READ_pHYs_SUPPORTED)
       else if (!png_memcmp(chunk_start + 4, png_pHYs, 4))
-		{
+      {
          if (png_ptr->mode != PNG_HAVE_IHDR &&
             png_ptr->mode != PNG_HAVE_PLTE)
             png_error(png_ptr, "Out of Place pHYs");
@@ -189,7 +189,7 @@
             png_error(png_ptr, "Out of Place tEXt");
 
          png_handle_tEXt(png_ptr, info, length);
-		}
+      }
 #endif
 #if defined(PNG_READ_zTXt_SUPPORTED)
       else if (!png_memcmp(chunk_start + 4, png_zTXt, 4))
@@ -255,7 +255,7 @@
                if (dsp_row)
                   png_combine_row(png_ptr, dsp_row,
                      png_pass_dsp_mask[png_ptr->pass]);
-					png_read_finish_row(png_ptr);
+               png_read_finish_row(png_ptr);
                return;
             }
             break;
@@ -273,7 +273,7 @@
             if ((png_ptr->row_number & 7) != 4)
             {
                if (dsp_row && (png_ptr->row_number & 4))
-						png_combine_row(png_ptr, dsp_row,
+                  png_combine_row(png_ptr, dsp_row,
                      png_pass_dsp_mask[png_ptr->pass]);
                png_read_finish_row(png_ptr);
                return;
@@ -291,7 +291,7 @@
             break;
          case 4:
             if ((png_ptr->row_number & 3) != 2)
-				{
+            {
                if (dsp_row && (png_ptr->row_number & 2))
                   png_combine_row(png_ptr, dsp_row,
                      png_pass_dsp_mask[png_ptr->pass]);
@@ -309,7 +309,7 @@
                return;
             }
             break;
-			case 6:
+         case 6:
             if (!(png_ptr->row_number & 1))
             {
                png_read_finish_row(png_ptr);
@@ -327,7 +327,7 @@
    png_ptr->zstream->avail_out = (uInt)png_ptr->irowbytes;
    do
    {
-		if (!(png_ptr->zstream->avail_in))
+      if (!(png_ptr->zstream->avail_in))
       {
          while (!png_ptr->idat_size)
          {
@@ -345,7 +345,7 @@
             png_reset_crc(png_ptr);
 
             png_crc_read(png_ptr, buf, 4);
-				if (png_memcmp(buf, png_IDAT, 4))
+            if (png_memcmp(buf, png_IDAT, 4))
                png_error(png_ptr, "Not enough image data");
 
          }
@@ -356,14 +356,14 @@
          png_crc_read(png_ptr, png_ptr->zbuf, png_ptr->zstream->avail_in);
          png_ptr->idat_size -= png_ptr->zstream->avail_in;
       }
-		ret = inflate(png_ptr->zstream, Z_PARTIAL_FLUSH);
+      ret = inflate(png_ptr->zstream, Z_PARTIAL_FLUSH);
       if (ret == Z_STREAM_END)
       {
          if (png_ptr->zstream->avail_out || png_ptr->zstream->avail_in ||
             png_ptr->idat_size)
             png_error(png_ptr, "Extra compressed data");
          png_ptr->mode = PNG_AT_LAST_IDAT;
-			break;
+         break;
       }
       if (ret != Z_OK)
          png_error(png_ptr, "Compression Error");
@@ -381,7 +381,7 @@
    png_ptr->row_info.rowbytes = ((png_ptr->row_info.width *
       (png_uint_32)png_ptr->row_info.pixel_depth + 7) >> 3);
 
-	if (png_ptr->row_buf[0])
+   if (png_ptr->row_buf[0])
       png_read_filter_row(&(png_ptr->row_info),
          png_ptr->row_buf + 1, png_ptr->prev_row + 1,
          (int)(png_ptr->row_buf[0]));
@@ -421,7 +421,7 @@
 /* read a one or more rows of image data.   If the image is interlaced,
    and png_set_interlace_handling() has been called, the rows need to
    to contain the contents of the rows from the previous pass.  If
-	the image has alpha or transparency, and png_handle_alpha() has been
+   the image has alpha or transparency, and png_handle_alpha() has been
    called, the rows contents must be initialized to the contents of the
    screen.  row holds the actual image, and pixels are placed in it
    as they arrive.  If the image is displayed after each pass, it will
@@ -435,22 +435,22 @@
    rows.  In this case, you do not have to provide a display_rows buffer
    also, but you may.  If the image is not interlaced, or if you have
    not called png_set_interlace_handling(), the display_row buffer will
-	be ignored, so pass NULL to it. */
+   be ignored, so pass NULL to it. */
 
 void
 png_read_rows(png_structp png_ptr, png_bytepp row,
-	png_bytepp display_row, png_uint_32 num_rows)
+   png_bytepp display_row, png_uint_32 num_rows)
 {
-	png_uint_32 i;
-	png_bytepp rp;
-	png_bytepp dp;
+   png_uint_32 i;
+   png_bytepp rp;
+   png_bytepp dp;
 
    rp = row;
    dp = display_row;
    for (i = 0; i < num_rows; i++)
    {
-		png_bytep rptr;
-		png_bytep dptr;
+      png_bytep rptr;
+      png_bytep dptr;
 
       if (rp)
          rptr = *rp;
@@ -461,7 +461,7 @@
       else
          dptr = NULL;
       png_read_row(png_ptr, rptr, dptr);
-		if (row)
+      if (row)
          rp++;
       if (display_row)
          dp++;
@@ -479,7 +479,7 @@
 {
    png_uint_32 i;
    int pass, j;
-	png_bytepp rp;
+   png_bytepp rp;
 
    pass = png_set_interlace_handling(png_ptr);
    for (j = 0; j < pass; j++)
@@ -533,7 +533,7 @@
          png_error(png_ptr, "invalid chunk after IDAT");
       }
       else if (!png_memcmp(chunk_start + 4, png_cHRM, 4))
-		{
+      {
          png_error(png_ptr, "invalid chunk after IDAT");
       }
       else if (!png_memcmp(chunk_start + 4, png_tRNS, 4))
@@ -551,7 +551,7 @@
       else if (!png_memcmp(chunk_start + 4, png_IDAT, 4))
       {
          if (length > 0 || png_ptr->mode != PNG_AT_LAST_IDAT)
-				png_error(png_ptr, "too many IDAT's found");
+            png_error(png_ptr, "too many IDAT's found");
       }
       else if (!png_memcmp(chunk_start + 4, png_pHYs, 4))
       {
@@ -569,7 +569,7 @@
             png_error(png_ptr, "Out of Place tIME");
 
          if (info)
-				png_handle_tIME(png_ptr, info, length);
+            png_handle_tIME(png_ptr, info, length);
          else
             png_crc_skip(png_ptr, length);
       }
@@ -605,7 +605,7 @@
          png_ptr->mode = PNG_AFTER_IEND;
       }
       else
-		{
+      {
          if ((chunk_start[4] & 0x20) == 0)
             png_error(png_ptr, "Unknown Critical Chunk");
 
@@ -616,7 +616,7 @@
       if (((crc ^ 0xffffffffL) & 0xffffffffL) !=
          (png_ptr->crc & 0xffffffffL))
          png_error(png_ptr, "Bad CRC value");
-		if (png_ptr->mode == PNG_AT_LAST_IDAT)
+      if (png_ptr->mode == PNG_AT_LAST_IDAT)
          png_ptr->mode = PNG_AFTER_IDAT;
    } while (png_ptr->mode != PNG_AFTER_IEND);
 }
@@ -629,37 +629,27 @@
    jmp_buf tmp_jmp;
 
    if (info)
-	{
-		if (png_ptr->do_free & PNG_FREE_PALETTE)
-			png_free(png_ptr, info->palette);
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) && defined(PNG_READ_bKGD_SUPPORTED)
-		if (png_ptr->do_free & PNG_FREE_TRANS)
-			png_free(png_ptr, info->trans);
-#endif
-#if defined(PNG_READ_hIST_SUPPORTED)
-		if (png_ptr->do_free & PNG_FREE_HIST)
-			png_free(png_ptr, info->hist);
-#endif
+   {
 #if defined(PNG_READ_tEXt_SUPPORTED) || defined(PNG_READ_zTXt_SUPPORTED)
-		for (i = 0; i < info->num_text; i++)
-		{
-			png_large_free(png_ptr, info->text[i].key);
-		}
+      for (i = 0; i < info->num_text; i++)
+      {
+         png_large_free(png_ptr, info->text[i].key);
+      }
 
-		png_free(png_ptr, info->text);
+      png_large_free(png_ptr, info->text);
 #endif
-		png_memset(info, 0, sizeof(png_info));
-	}
+      png_memset(info, 0, sizeof(png_info));
+   }
 
    if (end_info)
    {
 #if defined(PNG_READ_tEXt_SUPPORTED) || defined(PNG_READ_zTXt_SUPPORTED)
-		for (i = 0; i < end_info->num_text; i++)
+      for (i = 0; i < end_info->num_text; i++)
       {
-			png_large_free(png_ptr, end_info->text[i].key);
+         png_large_free(png_ptr, end_info->text[i].key);
       }
 
-      png_free(png_ptr, end_info->text);
+      png_large_free(png_ptr, end_info->text);
 #endif
       png_memset(end_info, 0, sizeof(png_info));
    }
@@ -669,59 +659,61 @@
    png_large_free(png_ptr, png_ptr->prev_row);
 #if defined(PNG_READ_DITHER_SUPPORTED)
    png_large_free(png_ptr, png_ptr->palette_lookup);
-   png_free(png_ptr, png_ptr->dither_index);
+   png_large_free(png_ptr, png_ptr->dither_index);
 #endif
 #if defined(PNG_READ_GAMMA_SUPPORTED)
-	png_free(png_ptr, png_ptr->gamma_table);
+   png_large_free(png_ptr, png_ptr->gamma_table);
 #endif
 #if defined(PNG_READ_BACKGROUND_SUPPORTED)
-   png_free(png_ptr, png_ptr->gamma_from_1);
-   png_free(png_ptr, png_ptr->gamma_to_1);
+   png_large_free(png_ptr, png_ptr->gamma_from_1);
+   png_large_free(png_ptr, png_ptr->gamma_to_1);
+#endif
+   if (png_ptr->do_free & PNG_FREE_PALETTE)
+      png_large_free(png_ptr, png_ptr->palette);
+#if defined(PNG_READ_BACKGROUND_SUPPORTED) && defined(PNG_READ_bKGD_SUPPORTED)
+   if (png_ptr->do_free & PNG_FREE_TRANS)
+      png_large_free(png_ptr, png_ptr->trans);
+#endif
+#if defined(PNG_READ_hIST_SUPPORTED)
+   if (png_ptr->do_free & PNG_FREE_HIST)
+      png_large_free(png_ptr, png_ptr->hist);
 #endif
 #if defined(PNG_READ_GAMMA_SUPPORTED)
    if (png_ptr->gamma_16_table)
    {
       for (i = 0; i < (1 << (8 - png_ptr->gamma_shift)); i++)
       {
-         png_free(png_ptr, png_ptr->gamma_16_table[i]);
-      }
-	}
-#endif
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
-   png_free(png_ptr, png_ptr->gamma_16_table);
-   if (png_ptr->gamma_16_from_1)
-	{
-      for (i = 0; i < (1 << (8 - png_ptr->gamma_shift)); i++)
-		{
-         png_free(png_ptr, png_ptr->gamma_16_from_1[i]);
+         png_large_free(png_ptr, png_ptr->gamma_16_table[i]);
       }
    }
-   png_free(png_ptr, png_ptr->gamma_16_from_1);
+#endif
+#if defined(PNG_READ_BACKGROUND_SUPPORTED)
+   png_large_free(png_ptr, png_ptr->gamma_16_table);
+   if (png_ptr->gamma_16_from_1)
+   {
+      for (i = 0; i < (1 << (8 - png_ptr->gamma_shift)); i++)
+      {
+         png_large_free(png_ptr, png_ptr->gamma_16_from_1[i]);
+      }
+   }
+   png_large_free(png_ptr, png_ptr->gamma_16_from_1);
    if (png_ptr->gamma_16_to_1)
    {
       for (i = 0; i < (1 << (8 - png_ptr->gamma_shift)); i++)
       {
-         png_free(png_ptr, png_ptr->gamma_16_to_1[i]);
+         png_large_free(png_ptr, png_ptr->gamma_16_to_1[i]);
       }
-	}
-   png_free(png_ptr, png_ptr->gamma_16_to_1);
+   }
+   png_large_free(png_ptr, png_ptr->gamma_16_to_1);
 #endif
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
-   png_free(png_ptr, png_ptr->trans);
-#endif
-#if defined(PNG_READ_DITHER_SUPPORTED)
-	png_free(png_ptr, png_ptr->hist);
-#endif
-	if (!png_ptr->user_palette)
-		png_free(png_ptr, png_ptr->palette);
 
-	inflateEnd(png_ptr->zstream);
-	png_free(png_ptr, png_ptr->zstream);
+   inflateEnd(png_ptr->zstream);
+   png_free(png_ptr, png_ptr->zstream);
 #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-	png_free(png_ptr, png_ptr->save_buffer);
+   png_large_free(png_ptr, png_ptr->save_buffer);
 #endif
-	png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
-	png_memset(png_ptr, 0, sizeof (png_struct));
-	png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
+   png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
+   png_memset(png_ptr, 0, sizeof (png_struct));
+   png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
 }