
Libpng 1.2.30rc02 - July 21, 2008

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

   libpng-1.2.30rc02.tar.gz
   libpng-1.2.30rc02.tar.lzma
     (Get the lzma codec from <http://tukaani.org/lzma>).
   libpng-1.2.30rc02.tar.bz2

Source files with LF line endings (for Unix/Linux) without the
"configure" script

   libpng-1.2.30rc02-no-config.tar.gz
   libpng-1.2.30rc02-no-config.tar.lzma
   libpng-1.2.30rc02-no-config.tar.bz2

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

   lp1230r02.zip
   lp1230r02.7z
   lp1230r02.tar.bz2

Project files

   libpng-1.2.30rc02-project-netware.zip
   libpng-1.2.30rc02-project-wince.zip

Other information:

   libpng-1.2.30rc02-README.txt
   libpng-1.2.30rc02-KNOWNBUGS.txt
   libpng-1.2.30rc02-LICENSE.txt
   libpng-1.2.30rc02-Y2K-compliance.txt
   libpng-1.2.30rc02-[previous version]-diff.txt

Changes since the last public release (1.2.29):

version 1.2.29beta01 [May 1, 2008]
  Removed some stray *.diff and *.orig files

version 1.2.29beta02 [May 1, 2008]
  Reverted Makefile.in, aclocal.m4, and configure to the libpng-1.2.26
    versions.

version 1.2.29beta03 [May 2, 2008]
  Added --force to autogen libtoolize options and --force-missing to
    automake options.
  Changed $(ECHO) to echo in Makefile.am and Makefile.in
  Updated all configure files to autoconf-2.62
  #ifdef out pnggcrd.c code if using MSC_VER

version 1.2.29rc01 [May 4, 2008]
  No changes.

version 1.0.35 and 1.2.29 [May 8, 2008]
  No changes.

version 1.0.37 [May 9, 2008]
  Updated Makefile.in and configure (omitted version 1.0.36).

version 1.2.30beta01 [May 29, 2008]
  Updated libpng.pc-configure.in and libpng-config.in per debian bug reports.

version 1.2.30beta02 [June 25, 2008]
  Restored png_flush(png_ptr) at the end of png_write_end(), that was
    removed from libpng-1.0.9beta03.

version 1.2.30beta03 [July 6, 2008]
  Merged some cosmetic whitespace changes from libpng-1.4.0beta19.
  Inline call of png_get_uint_32() in png_get_uint_31(), as in 1.4.0beta19.
  Added demo of decoding vpAg and sTER chunks to pngtest.c, from 1.4.0beta19.
  Changed PNGMAJ from 0 to 12 in makefile.darwin, which does not like 0.
  Added new private function png_read_chunk_header() from 1.4.0beta19.
  Merged reading of chunk length and chunk type into a single 8-byte read.
  Merged writing of chunk length and chunk type into a single 8-byte write.

version 1.2.30beta04 [July 10, 2008]
  Merged more cosmetic whitespace changes from libpng-1.4.0beta19.

version 1.0.38rc01, 1.2.30rc01 [July 17, 2008]
  No changes.

version 1.0.38rc02, 1.2.30rc02 [July 21, 2008]
  Moved local array "chunkdata" from pngrutil.c to the png_struct, so
    it will be freed by png_read_destroy() in case of a read error.


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
