
Libpng 1.5.0beta05 - February 13, 2010

This is not intended to be a public release.  It will be replaced
within a few weeks by a public version or by another test version.

Files available for download:

Source files with LF line endings (for Unix/Linux) and with a
"configure" script

   1.5.0beta05.tar.xz (LZMA-compressed, recommended)
   1.5.0beta05.tar.gz
   1.5.0beta05.tar.bz2

Source files with CRLF line endings (for Windows), without the
"configure" script

   lp150b05.zip
   lp150b05.7z

Other information:

   1.5.0beta05-README.txt
   1.5.0beta05-LICENSE.txt

Changes since the last public release (1.4.1):

version 1.5.0beta01 [February 7, 2010]
  Moved declaration of png_struct into private pngstruct.h and png_info
    into pnginfo.h

version 1.5.0beta02 [February 7, 2010]
  Reverted to original png_push_save_buffer() code.

version 1.5.0beta03 [February 8, 2010]
  Return allocated "old_buffer" in png_push_save_buffer() before
    calling png_error().
  Updated configure script to use SO number 15.

version 1.5.0beta04 [February 9, 2010]
  Removed malformed "incomplete struct declaration" of png_info from png.h

version 1.5.0beta05 [February 13, 2010]
  Removed PNG_DEPSTRUCT markup in pngstruct.h and pnginfo.h, and undid the
    linewrapping that it entailed.
  Revised comments in pngstruct.h and pnginfo.h and added pointers to
    the libpng license.
  Changed PNG_INTERNAL to PNG_EXPOSE_INTERNAL_STRUCTURES
  Removed the cbuilder5 project, which has not been updated to 1.4.0.

Send comments/corrections/commendations to png-mng-implement at lists.sf.net
(subscription required; visit
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
to subscribe) or to glennrp at users.sourceforge.net

Glenn R-P
