mirror of
				https://git.code.sf.net/p/libpng/code.git
				synced 2025-07-10 18:04:09 +02:00 
			
		
		
		
	Imported from libpng-0.87.tar
This commit is contained in:
		
							parent
							
								
									69b1448f19
								
							
						
					
					
						commit
						4ee97b0891
					
				
							
								
								
									
										74
									
								
								libpng.txt
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								libpng.txt
									
									
									
									
									
								
							@ -1,9 +1,9 @@
 | 
				
			|||||||
libpng.txt - a description on how to use and modify libpng
 | 
					libpng.txt - a description on how to use and modify libpng
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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
 | 
						For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
	January 10, 1996
 | 
						January 15, 1996
 | 
				
			||||||
	Updated/rewritten per request in the libpng FAQ
 | 
						Updated/rewritten per request in the libpng FAQ
 | 
				
			||||||
	Copyright (c) 1995 Frank J. T. Wojcik
 | 
						Copyright (c) 1995 Frank J. T. Wojcik
 | 
				
			||||||
	December 18, 1995
 | 
						December 18, 1995
 | 
				
			||||||
@ -13,7 +13,7 @@ I. Introduction
 | 
				
			|||||||
This file describes how to use and modify the PNG reference library
 | 
					This file describes how to use and modify the PNG reference library
 | 
				
			||||||
(known as libpng) for your own use.  There are five sections to this
 | 
					(known as libpng) for your own use.  There are five sections to this
 | 
				
			||||||
file: introduction, structures, reading, writing, and modification and
 | 
					file: introduction, structures, reading, writing, and modification and
 | 
				
			||||||
configuration notes for various special platforms.  Other then this
 | 
					configuration notes for various special platforms.  In addition to this
 | 
				
			||||||
file, example.c is a good starting point for using the library, as
 | 
					file, example.c is a good starting point for using the library, as
 | 
				
			||||||
it is heavily commented and should include everything most people
 | 
					it is heavily commented and should include everything most people
 | 
				
			||||||
will need.
 | 
					will need.
 | 
				
			||||||
@ -22,7 +22,7 @@ Libpng was written as a companion to the PNG specification, as a
 | 
				
			|||||||
way to reduce the amount of time and effort it takes to support
 | 
					way to reduce the amount of time and effort it takes to support
 | 
				
			||||||
the PNG file format in application programs.  Most users will not
 | 
					the PNG file format in application programs.  Most users will not
 | 
				
			||||||
have to modify the library significantly; advanced users may want
 | 
					have to modify the library significantly; advanced users may want
 | 
				
			||||||
to modify it more.  The library was coded for both kind of users.
 | 
					to modify it more.  The library was coded for both kinds of users.
 | 
				
			||||||
All attempts were made to make it as complete as possible, while
 | 
					All attempts were made to make it as complete as possible, while
 | 
				
			||||||
keeping the code easy to understand.  Currently, this library
 | 
					keeping the code easy to understand.  Currently, this library
 | 
				
			||||||
only supports C.  Support for other languages is being considered.
 | 
					only supports C.  Support for other languages is being considered.
 | 
				
			||||||
@ -37,9 +37,15 @@ majority of the needs of it's users.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Libpng uses zlib for its compression and decompression of PNG files.
 | 
					Libpng uses zlib for its compression and decompression of PNG files.
 | 
				
			||||||
The zlib compression utility is a general purpose utility that is
 | 
					The zlib compression utility is a general purpose utility that is
 | 
				
			||||||
useful for more then PNG files, and can be used without libpng.
 | 
					useful for more than PNG files, and can be used without libpng.
 | 
				
			||||||
See the documentation delivered with zlib for more details.
 | 
					See the documentation delivered with zlib for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Libpng is thread safe provided the threads are using different
 | 
				
			||||||
 | 
					instances of the structures.  Each thread should have its own
 | 
				
			||||||
 | 
					png_struct and png_info instances, and thus its own image.
 | 
				
			||||||
 | 
					Libpng does not protect itself against two threads using the
 | 
				
			||||||
 | 
					same instance of a structure.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
II. Structures
 | 
					II. Structures
 | 
				
			||||||
@ -287,8 +293,8 @@ PNG can have files with 16 bits per channel.  If you only can handle
 | 
				
			|||||||
   if (info_ptr->bit_depth == 16)
 | 
					   if (info_ptr->bit_depth == 16)
 | 
				
			||||||
      png_set_strip_16(png_ptr);
 | 
					      png_set_strip_16(png_ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you need to reduce an rgb file to a paletted file (perhaps because
 | 
					If you need to reduce an rgb file to a paletted file, or if a
 | 
				
			||||||
a paletted file has more entries then will fit on your screen)
 | 
					paletted file has more entries then will fit on your screen,
 | 
				
			||||||
png_set_dither() will do that.  Note that this is a simple match
 | 
					png_set_dither() will do that.  Note that this is a simple match
 | 
				
			||||||
dither, that merely finds the closest color available.  This should
 | 
					dither, that merely finds the closest color available.  This should
 | 
				
			||||||
work fairly well with optimized palettes, and fairly badly with linear
 | 
					work fairly well with optimized palettes, and fairly badly with linear
 | 
				
			||||||
@ -799,7 +805,7 @@ time_t routine uses gmtime().  You don't have to use either of
 | 
				
			|||||||
these, but if you wish to fill in the png_time structure directly,
 | 
					these, but if you wish to fill in the png_time structure directly,
 | 
				
			||||||
you should provide the time in universal time (GMT) if possible
 | 
					you should provide the time in universal time (GMT) if possible
 | 
				
			||||||
instead of your local time.  Note that the year number is the full
 | 
					instead of your local time.  Note that the year number is the full
 | 
				
			||||||
year (ie 1996, rather than 96)
 | 
					year (ie 1996, rather than 96).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It is possible to have libpng flush any pending output, either manually,
 | 
					It is possible to have libpng flush any pending output, either manually,
 | 
				
			||||||
or automatically after a certain number of lines have been written.  To
 | 
					or automatically after a certain number of lines have been written.  To
 | 
				
			||||||
@ -1024,8 +1030,9 @@ The replacement I/O functions should have prototypes as follows:
 | 
				
			|||||||
		png_uint_32 length);
 | 
							png_uint_32 length);
 | 
				
			||||||
	void user_flush_data(png_structp png_ptr);
 | 
						void user_flush_data(png_structp png_ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Note that you can pass NULL for the flush function if you are not doing
 | 
					Supplying NULL for the read, write, or flush functions sets them back
 | 
				
			||||||
flushing of the output data.
 | 
					to using the default C stream functions.  It is an error to read from
 | 
				
			||||||
 | 
					a write stream, and vice versa.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Error handling in libpng is done through png_error() and png_warning().
 | 
					Error handling in libpng is done through png_error() and png_warning().
 | 
				
			||||||
Errors handled through png_error() are fatal, meaning that png_error()
 | 
					Errors handled through png_error() are fatal, meaning that png_error()
 | 
				
			||||||
@ -1073,13 +1080,19 @@ itself.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Configuring for 16 bit platforms:
 | 
					Configuring for 16 bit platforms:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You will probably need to change the png_large_malloc() and
 | 
					You may need to change the png_large_malloc() and
 | 
				
			||||||
png_large_free() routines in pngmem.c, as these are requred
 | 
					png_large_free() routines in pngmem.c, as these are requred
 | 
				
			||||||
to allocate 64K.  Also, you will want to look into zconf.h to tell
 | 
					to allocate 64K.  Also, you will want to look into zconf.h to tell
 | 
				
			||||||
zlib (and thus libpng) that it cannot allocate more then 64K at a
 | 
					zlib (and thus libpng) that it cannot allocate more then 64K at a
 | 
				
			||||||
time.  Even if you can, the memory won't be accessable.  So limit zlib
 | 
					time.  Even if you can, the memory won't be accessable.  So limit zlib
 | 
				
			||||||
and libpng to 64K by defining MAXSEG_64K.
 | 
					and libpng to 64K by defining MAXSEG_64K.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Configuring for DOS:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For DOS users which only have access to the lower 640K, you will
 | 
				
			||||||
 | 
					have to limit zlib's memory usage via a png_set_compression_mem_level()
 | 
				
			||||||
 | 
					call.  See zlib.h or zconf.h in the zlib library for more information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Configuring for Medium Model:
 | 
					Configuring for Medium Model:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Libpng's support for medium model has been tested on most of the popular
 | 
					Libpng's support for medium model has been tested on most of the popular
 | 
				
			||||||
@ -1089,7 +1102,7 @@ all set.  Everything in the library (except for zlib's structure) is
 | 
				
			|||||||
expecting far data.  You must use the typedefs with the p or pp on
 | 
					expecting far data.  You must use the typedefs with the p or pp on
 | 
				
			||||||
the end for pointers (or at least look at them and be careful).  Make
 | 
					the end for pointers (or at least look at them and be careful).  Make
 | 
				
			||||||
note that the row's of data are defined as png_bytepp which is a
 | 
					note that the row's of data are defined as png_bytepp which is a
 | 
				
			||||||
unsigned char far * far *
 | 
					unsigned char far * far *.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Configuring for gui/windowing platforms:
 | 
					Configuring for gui/windowing platforms:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1099,14 +1112,47 @@ You may want to write a single function to do this and call it something
 | 
				
			|||||||
like png_message().  On some compliers, you may have to change the
 | 
					like png_message().  On some compliers, you may have to change the
 | 
				
			||||||
memory allocators (png_malloc, etc.).
 | 
					memory allocators (png_malloc, etc.).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Configuring for compiler xxx:
 | 
					Configuring for compiler xxx:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
All includes for libpng are in pngconf.h.  If you need to add/change/delete
 | 
					All includes for libpng are in pngconf.h.  If you need to add/change/delete
 | 
				
			||||||
an include, this is the place to do it.  The includes that are not
 | 
					an include, this is the place to do it.  The includes that are not
 | 
				
			||||||
needed outside libpng are protected by the PNG_INTERNAL definition,
 | 
					needed outside libpng are protected by the PNG_INTERNAL definition,
 | 
				
			||||||
which is only defined for those routines inside libpng itself.  The
 | 
					which is only defined for those routines inside libpng itself.  The
 | 
				
			||||||
files in libpng proper only include png.h.
 | 
					files in libpng proper only include png.h, which includes pngconf.h.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Configuring zlib:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There are special functions to configure the compression.  Perhaps
 | 
				
			||||||
 | 
					the most useful one changes the compression level.  The library
 | 
				
			||||||
 | 
					normally uses the default compression level, but for maximum
 | 
				
			||||||
 | 
					compression (9) or maximum speed (1), you may desire to change the
 | 
				
			||||||
 | 
					level.  You do this by calling:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						png_set_compression_mem_level(png_ptr, level);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Another useful one is to reduce the memory level used by the library.
 | 
				
			||||||
 | 
					The memory level defaults to 8, but it can be lowered if you are
 | 
				
			||||||
 | 
					short on memory (running DOS, for example, where you only have 640K).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						png_set_compression_mem_level(png_ptr, level);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you want to control whether libpng uses filtering or not, you
 | 
				
			||||||
 | 
					can call this function.  I recommend not changing the default unless
 | 
				
			||||||
 | 
					you are experimenting with compression ratios.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						png_set_filtering(png_ptr, use_filter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The other functions are for configuring zlib.  They are not recommended
 | 
				
			||||||
 | 
					for normal use and may result in writing an invalid png file.  See
 | 
				
			||||||
 | 
					zlib.h for more information on what these mean.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						png_set_compression_strategy(png_ptr, strategy);
 | 
				
			||||||
 | 
						png_set_compression_window_bits(png_ptr, window_bits);
 | 
				
			||||||
 | 
						png_set_compression_method(png_ptr, method);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Except for png_set_filtering(), all of these are just controlling
 | 
				
			||||||
 | 
					zlib, so see the zlib documentation (zlib.h and zconf.h) for more
 | 
				
			||||||
 | 
					information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Removing unwanted object code:
 | 
					Removing unwanted object code:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										73
									
								
								makefile.elf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								makefile.elf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					# makefile for libpng on (linux) ELF
 | 
				
			||||||
 | 
					# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
 | 
					# For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CC=gcc
 | 
				
			||||||
 | 
					CFLAGS=-I../zlib -O2 -Wall -fPIC
 | 
				
			||||||
 | 
					LDFLAGS=-L. -L../zlib/ -lpng -lz -lm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RANLIB=ranlib
 | 
				
			||||||
 | 
					#RANLIB=echo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PNGVER = 0.87
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# where make install puts libpng.a, libpng.so*, and png.h
 | 
				
			||||||
 | 
					prefix=/usr/local
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OBJS = png.o pngrcb.o pngrutil.o pngtrans.o pngwutil.o \
 | 
				
			||||||
 | 
					       pngread.o pngio.o pngwrite.o pngrtran.o pngwtran.o \
 | 
				
			||||||
 | 
					       pngmem.o pngerror.o pngpread.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					all: libpng.so pngtest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					libpng.a: $(OBJS)
 | 
				
			||||||
 | 
						ar rc $@  $(OBJS)
 | 
				
			||||||
 | 
						$(RANLIB) $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					libpng.so: libpng.so.1
 | 
				
			||||||
 | 
						ln -sf libpng.so.1 libpng.so
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					libpng.so.1: libpng.so.1.$(PNGVER)
 | 
				
			||||||
 | 
						ln -sf libpng.so.1.$(PNGVER) libpng.so.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					libpng.so.1.$(PNGVER): $(OBJS)
 | 
				
			||||||
 | 
						gcc -shared -Wl,-soname,libpng.so.1 -o libpng.so.1.$(PNGVER) $(OBJS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pngtest: pngtest.o libpng.so
 | 
				
			||||||
 | 
						$(CC) -o pngtest $(CCFLAGS) pngtest.o $(LDFLAGS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test: pngtest
 | 
				
			||||||
 | 
						./pngtest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install: libpng.so.1.$(PNGVER)
 | 
				
			||||||
 | 
						-@mkdir $(prefix)/include
 | 
				
			||||||
 | 
						-@mkdir $(prefix)/lib
 | 
				
			||||||
 | 
						cp png.h $(prefix)/include
 | 
				
			||||||
 | 
						cp pngconf.h $(prefix)/include
 | 
				
			||||||
 | 
						chmod 644 $(prefix)/include/png.h
 | 
				
			||||||
 | 
						chmod 644 $(prefix)/include/pngconf.h
 | 
				
			||||||
 | 
						cp libpng.so.1.$(PNGVER) $(prefix)/lib
 | 
				
			||||||
 | 
						chmod 755 $(prefix)/lib/libpng.so.1.$(PNGVER)
 | 
				
			||||||
 | 
						-@/bin/rm $(prefix)/lib/libpng.so.1 $(prefix)/lib/libpng.so
 | 
				
			||||||
 | 
						(cd $(prefix)/lib; ln -sf libpng.so.1.$(PNGVER) libpng.so.1; \
 | 
				
			||||||
 | 
						 ln -sf libpng.so.1 libpng.so)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean:
 | 
				
			||||||
 | 
						rm -f *.o libpng.so.1.$(PNGVER) libpng.so.1 libpng.so pngtest pngout.png
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					png.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngerror.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngio.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngmem.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngrcb.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngread.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngrtran.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngrutil.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngtest.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngtrans.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngwrite.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngwtran.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngwutil.o: png.h pngconf.h
 | 
				
			||||||
 | 
					pngpread.o: png.h pngconf.h
 | 
				
			||||||
@ -2,15 +2,15 @@
 | 
				
			|||||||
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
 | 
					# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
# For conditions of distribution and use, see copyright notice in png.h
 | 
					# For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CC=cc
 | 
					CC=gcc
 | 
				
			||||||
CFLAGS=-I../zlib -O
 | 
					CFLAGS=-I../zlib -O2 -Wall
 | 
				
			||||||
LDFLAGS=-L. -L../zlib/ -lpng -lz -lm
 | 
					LDFLAGS=-L. -L../zlib/ -lpng -lz -lm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#RANLIB=ranlib
 | 
					RANLIB=ranlib
 | 
				
			||||||
RANLIB=echo
 | 
					#RANLIB=echo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# where make install puts libpng.a and png.h
 | 
					# where make install puts libpng.a and png.h
 | 
				
			||||||
prefix=/usr/local
 | 
					prefix=/home/munet-d2/sun/local
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OBJS = png.o pngrcb.o pngrutil.o pngtrans.o pngwutil.o \
 | 
					OBJS = png.o pngrcb.o pngrutil.o pngtrans.o pngwutil.o \
 | 
				
			||||||
	pngread.o pngio.o pngwrite.o pngrtran.o pngwtran.o \
 | 
						pngread.o pngio.o pngwrite.o pngrtran.o pngwtran.o \
 | 
				
			||||||
@ -31,11 +31,12 @@ test: pngtest
 | 
				
			|||||||
install: libpng.a
 | 
					install: libpng.a
 | 
				
			||||||
	-@mkdir $(prefix)/include
 | 
						-@mkdir $(prefix)/include
 | 
				
			||||||
	-@mkdir $(prefix)/lib
 | 
						-@mkdir $(prefix)/lib
 | 
				
			||||||
	cp png.h $(prefix)/include
 | 
						cp png.h pngconf.h $(prefix)/include
 | 
				
			||||||
	cp pngconf.h $(prefix)/include
 | 
						rcp png.h pngconf.h vlsi:bin/include
 | 
				
			||||||
	chmod 644 $(prefix)/include/png.h
 | 
						chmod 644 $(prefix)/include/png.h
 | 
				
			||||||
	chmod 644 $(prefix)/include/pngconf.h
 | 
						chmod 644 $(prefix)/include/pngconf.h
 | 
				
			||||||
	cp libpng.a $(prefix)/lib
 | 
						cp libpng.a $(prefix)/lib
 | 
				
			||||||
 | 
						rcp libpng.a vlsi:bin/lib
 | 
				
			||||||
	chmod 644 $(prefix)/lib/libpng.a
 | 
						chmod 644 $(prefix)/lib/libpng.a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
clean:
 | 
					clean:
 | 
				
			||||||
@ -57,3 +58,4 @@ pngwrite.o: png.h pngconf.h
 | 
				
			|||||||
pngwtran.o: png.h pngconf.h
 | 
					pngwtran.o: png.h pngconf.h
 | 
				
			||||||
pngwutil.o: png.h pngconf.h
 | 
					pngwutil.o: png.h pngconf.h
 | 
				
			||||||
pngpread.o: png.h pngconf.h
 | 
					pngpread.o: png.h pngconf.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										27
									
								
								png.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								png.c
									
									
									
									
									
								
							@ -1,10 +1,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* png.c - location for general purpose png functions
 | 
					/* png.c - location for general purpose png functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PNG_INTERNAL
 | 
					#define PNG_INTERNAL
 | 
				
			||||||
@ -13,7 +13,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* version information for c files.  This better match the version
 | 
					/* version information for c files.  This better match the version
 | 
				
			||||||
   string defined in png.h */
 | 
					   string defined in png.h */
 | 
				
			||||||
char FARDATA png_libpng_ver[] = "0.86";
 | 
					char png_libpng_ver[] = "0.87";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* place to hold the signiture string for a png file. */
 | 
					/* place to hold the signiture string for a png file. */
 | 
				
			||||||
png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
 | 
					png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
 | 
				
			||||||
@ -107,11 +107,22 @@ png_check_sig(png_bytep sig, int num)
 | 
				
			|||||||
voidpf
 | 
					voidpf
 | 
				
			||||||
png_zalloc(voidpf png_ptr, uInt items, uInt size)
 | 
					png_zalloc(voidpf png_ptr, uInt items, uInt size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	voidp ptr;
 | 
						png_voidp ptr;
 | 
				
			||||||
 | 
						png_uint_32 num_bytes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ptr = ((voidp)png_large_malloc((png_structp)png_ptr,
 | 
						ptr = png_large_malloc((png_structp)png_ptr,
 | 
				
			||||||
		(png_uint_32)items * (png_uint_32)size));
 | 
							(png_uint_32)items * (png_uint_32)size);
 | 
				
			||||||
	png_memset(ptr, 0, (png_uint_32)items * (png_uint_32)size);
 | 
						num_bytes = (png_uint_32)items * (png_uint_32)size;
 | 
				
			||||||
 | 
						if (num_bytes > (png_uint_32)0x7fff)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							png_memset(ptr, 0, (png_size_t)0x8000L);
 | 
				
			||||||
 | 
							png_memset((png_bytep)ptr + (png_size_t)0x8000L, 0,
 | 
				
			||||||
 | 
								(png_size_t)(num_bytes - (png_uint_32)0x8000L));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							png_memset(ptr, 0, (png_size_t)num_bytes);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
   return (voidpf)(ptr);
 | 
					   return (voidpf)(ptr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -119,7 +130,7 @@ png_zalloc(voidpf png_ptr, uInt items, uInt size)
 | 
				
			|||||||
void
 | 
					void
 | 
				
			||||||
png_zfree(voidpf png_ptr, voidpf ptr)
 | 
					png_zfree(voidpf png_ptr, voidpf ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	png_large_free((png_structp)png_ptr, (voidp)ptr);
 | 
						png_large_free((png_structp)png_ptr, (png_voidp)ptr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* reset the crc variable to 32 bits of 1's.  Care must be taken
 | 
					/* reset the crc variable to 32 bits of 1's.  Care must be taken
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										62
									
								
								png.h
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								png.h
									
									
									
									
									
								
							@ -1,12 +1,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* png.h - header file for png reference library
 | 
					/* png.h - header file for png reference library
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	libpng 1.0 beta 2 - version 0.86
 | 
					   libpng 1.0 beta 2 - version 0.87
 | 
				
			||||||
	Jan 10, 1996
 | 
					   Jan 15, 1996
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   Note: This is a beta version.  It reads and writes valid files
 | 
					   Note: This is a beta version.  It reads and writes valid files
 | 
				
			||||||
   on the platforms I have, but it has had limited portability
 | 
					   on the platforms I have, but it has had limited portability
 | 
				
			||||||
	testing.  Furthermore, you will may have to modify the
 | 
					   testing.  Furthermore, you may have to modify the
 | 
				
			||||||
   includes below to get it to work on your system, and you
 | 
					   includes below to get it to work on your system, and you
 | 
				
			||||||
   may have to supply the correct compiler flags in the makefile.
 | 
					   may have to supply the correct compiler flags in the makefile.
 | 
				
			||||||
   Read the readme.txt for more information, and how to contact
 | 
					   Read the readme.txt for more information, and how to contact
 | 
				
			||||||
@ -74,10 +74,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* version information for png.h - this should match the version
 | 
					/* version information for png.h - this should match the version
 | 
				
			||||||
   number in png.c */
 | 
					   number in png.c */
 | 
				
			||||||
#define PNG_LIBPNG_VER_STRING "0.86"
 | 
					#define PNG_LIBPNG_VER_STRING "0.87"
 | 
				
			||||||
/* careful here.  I wanted to use 086, but that would be octal.  Version
 | 
					/* careful here.  I wanted to use 087, but that would be octal.  Version
 | 
				
			||||||
   1.0 will be 100 here, etc. */
 | 
					   1.0 will be 100 here, etc. */
 | 
				
			||||||
#define PNG_LIBPNG_VER 86
 | 
					#define PNG_LIBPNG_VER 87
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* variables defined in png.c - only it needs to define PNG_NO_EXTERN */
 | 
					/* variables defined in png.c - only it needs to define PNG_NO_EXTERN */
 | 
				
			||||||
#ifndef PNG_NO_EXTERN
 | 
					#ifndef PNG_NO_EXTERN
 | 
				
			||||||
@ -269,7 +269,7 @@ typedef png_info        FAR * FAR * png_infopp;
 | 
				
			|||||||
#define PNG_INFO_oFFs 0x0100
 | 
					#define PNG_INFO_oFFs 0x0100
 | 
				
			||||||
#define PNG_INFO_tIME 0x0200
 | 
					#define PNG_INFO_tIME 0x0200
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* these determine if a function in the info needs freed */
 | 
					/* these determine if a function in the info needs to be freed */
 | 
				
			||||||
#define PNG_FREE_PALETTE 0x0001
 | 
					#define PNG_FREE_PALETTE 0x0001
 | 
				
			||||||
#define PNG_FREE_HIST 0x0002
 | 
					#define PNG_FREE_HIST 0x0002
 | 
				
			||||||
#define PNG_FREE_TRANS 0x0004
 | 
					#define PNG_FREE_TRANS 0x0004
 | 
				
			||||||
@ -392,6 +392,14 @@ struct png_struct_def
 | 
				
			|||||||
   png_uint_32 current_text_left;
 | 
					   png_uint_32 current_text_left;
 | 
				
			||||||
   png_charp current_text;
 | 
					   png_charp current_text;
 | 
				
			||||||
   png_charp current_text_ptr;
 | 
					   png_charp current_text_ptr;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
 | 
				
			||||||
 | 
					/* for the Borland special 64K segment handler */
 | 
				
			||||||
 | 
					   png_bytepp offset_table_ptr;
 | 
				
			||||||
 | 
					   png_bytep offset_table;
 | 
				
			||||||
 | 
					   png_uint_16 offset_table_number;
 | 
				
			||||||
 | 
					   png_uint_16 offset_table_count;
 | 
				
			||||||
 | 
					   png_uint_16 offset_table_count_free;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
   png_byte push_chunk_name[4];
 | 
					   png_byte push_chunk_name[4];
 | 
				
			||||||
   png_bytep save_buffer_ptr;
 | 
					   png_bytep save_buffer_ptr;
 | 
				
			||||||
@ -694,9 +702,11 @@ extern void png_read_data PNGARG((png_structp png_ptr, png_bytep data,
 | 
				
			|||||||
extern void png_init_io PNGARG((png_structp png_ptr, FILE *fp));
 | 
					extern void png_init_io PNGARG((png_structp png_ptr, FILE *fp));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Replace the error message and abort, and warning functions with user
 | 
					/* Replace the error message and abort, and warning functions with user
 | 
				
			||||||
	supplied functions.   If no messages are to be printed, NULL can be
 | 
					   supplied functions.  If no messages are to be printed then you must
 | 
				
			||||||
	supplied for error_fn and warning_fn, although error_fn will still do
 | 
					   supply replacement message functions. The replacement error_fn should
 | 
				
			||||||
	a longjmp to the last setjmp location. */
 | 
					   still do a longjmp to the last setjmp location if you are using this
 | 
				
			||||||
 | 
					   method of error handling.  If error_fn or warning_fn is NULL, the
 | 
				
			||||||
 | 
					   default functions will be used. */
 | 
				
			||||||
extern void png_set_message_fn PNGARG((png_structp png_ptr, png_voidp msg_ptr,
 | 
					extern void png_set_message_fn PNGARG((png_structp png_ptr, png_voidp msg_ptr,
 | 
				
			||||||
   png_msg_ptr error_fn, png_msg_ptr warning_fn));
 | 
					   png_msg_ptr error_fn, png_msg_ptr warning_fn));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -711,19 +721,21 @@ extern void png_set_write_fn PNGARG((png_structp png_ptr, png_voidp io_ptr,
 | 
				
			|||||||
   png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
 | 
					   png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Replace the default data input function with a user supplied one. */
 | 
					/* Replace the default data input function with a user supplied one. */
 | 
				
			||||||
extern void png_set_read_fn PNGARG((png_structp png_ptr, void *io_ptr,
 | 
					extern void png_set_read_fn PNGARG((png_structp png_ptr, png_voidp io_ptr,
 | 
				
			||||||
   png_rw_ptr read_data_fn));
 | 
					   png_rw_ptr read_data_fn));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Return the user pointer associated with the I/O functions */
 | 
					/* Return the user pointer associated with the I/O functions */
 | 
				
			||||||
extern png_voidp png_get_io_ptr PNGARG((png_structp png_ptr));
 | 
					extern png_voidp png_get_io_ptr PNGARG((png_structp png_ptr));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 | 
				
			||||||
/* Replace the default push model read functions */
 | 
					/* Replace the default push model read functions */
 | 
				
			||||||
extern void png_set_push_fn PNGARG((png_structp png_ptr, png_voidp push_ptr,
 | 
					extern void png_set_push_fn PNGARG((png_structp png_ptr, png_voidp push_ptr,
 | 
				
			||||||
   png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
 | 
					   png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
 | 
				
			||||||
   png_progressive_end_ptr end_fn));
 | 
					   png_progressive_end_ptr end_fn));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* returns the user pointer assiciated with the push read functions */
 | 
					/* returns the user pointer associated with the push read functions */
 | 
				
			||||||
extern png_voidp png_get_progressive_ptr PNGARG((png_structp png_ptr));
 | 
					extern png_voidp png_get_progressive_ptr PNGARG((png_structp png_ptr));
 | 
				
			||||||
 | 
					#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern png_voidp png_large_malloc PNGARG((png_structp png_ptr,
 | 
					extern png_voidp png_large_malloc PNGARG((png_structp png_ptr,
 | 
				
			||||||
   png_uint_32 size));
 | 
					   png_uint_32 size));
 | 
				
			||||||
@ -732,14 +744,14 @@ extern png_voidp png_large_malloc PNGARG((png_structp png_ptr,
 | 
				
			|||||||
extern void png_large_free PNGARG((png_structp png_ptr, png_voidp ptr));
 | 
					extern void png_large_free PNGARG((png_structp png_ptr, png_voidp ptr));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Allocate memory. */
 | 
					/* Allocate memory. */
 | 
				
			||||||
extern png_voidp png_malloc PNGARG((png_structp png_ptr, png_uint_32 size));
 | 
					extern void * png_malloc PNGARG((png_structp png_ptr, png_uint_32 size));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Reallocate memory. */
 | 
					/* Reallocate memory. */
 | 
				
			||||||
extern png_voidp png_realloc PNGARG((png_structp png_ptr, png_voidp ptr,
 | 
					extern void * png_realloc PNGARG((png_structp png_ptr, void * ptr,
 | 
				
			||||||
   png_uint_32 size, png_uint_32 old_size));
 | 
					   png_uint_32 size, png_uint_32 old_size));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* free's a pointer allocated by png_malloc() */
 | 
					/* free's a pointer allocated by png_malloc() */
 | 
				
			||||||
extern void png_free PNGARG((png_structp png_ptr, png_voidp ptr));
 | 
					extern void png_free PNGARG((png_structp png_ptr, void * ptr));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Fatal error in libpng - can't continue */ 
 | 
					/* Fatal error in libpng - can't continue */ 
 | 
				
			||||||
extern void png_error PNGARG((png_structp png_ptr, png_const_charp error));
 | 
					extern void png_error PNGARG((png_structp png_ptr, png_const_charp error));
 | 
				
			||||||
@ -883,11 +895,13 @@ extern void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr,
 | 
				
			|||||||
   png_uint_32 length));
 | 
					   png_uint_32 length));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* default error and warning functions if user doesn't supply them */
 | 
					/* default error and warning functions if user doesn't supply them */
 | 
				
			||||||
extern void png_default_warning PNGARG((png_structp png_ptr, png_const_charp message));
 | 
					extern void png_default_warning PNGARG((png_structp png_ptr,
 | 
				
			||||||
extern void png_default_error PNGARG((png_structp png_ptr, png_const_charp error));
 | 
					   png_const_charp message));
 | 
				
			||||||
 | 
					extern void png_default_error PNGARG((png_structp png_ptr,
 | 
				
			||||||
 | 
					   png_const_charp error));
 | 
				
			||||||
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
 | 
					#if defined(PNG_WRITE_FLUSH_SUPPORTED)
 | 
				
			||||||
extern void png_flush PNGARG((png_struct *png_ptr));
 | 
					extern void png_flush PNGARG((png_structp png_ptr));
 | 
				
			||||||
extern void png_default_flush PNGARG((png_struct *png_ptr));
 | 
					extern void png_default_flush PNGARG((png_structp png_ptr));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* place a 32 bit number into a buffer in png byte order.  We work
 | 
					/* place a 32 bit number into a buffer in png byte order.  We work
 | 
				
			||||||
@ -1280,16 +1294,12 @@ extern void png_process_IDAT_data PNGARG((png_structp png_ptr,
 | 
				
			|||||||
   png_bytep buffer, png_uint_32 buffer_length));
 | 
					   png_bytep buffer, png_uint_32 buffer_length));
 | 
				
			||||||
extern void png_push_process_row PNGARG((png_structp png_ptr));
 | 
					extern void png_push_process_row PNGARG((png_structp png_ptr));
 | 
				
			||||||
extern void png_push_handle_PLTE PNGARG((png_structp png_ptr,
 | 
					extern void png_push_handle_PLTE PNGARG((png_structp png_ptr,
 | 
				
			||||||
	png_infop info, png_uint_32 length));
 | 
					   png_uint_32 length));
 | 
				
			||||||
extern void png_push_read_plte PNGARG((png_structp png_ptr, png_infop info));
 | 
					extern void png_push_read_plte PNGARG((png_structp png_ptr, png_infop info));
 | 
				
			||||||
extern void png_push_handle_tRNS PNGARG((png_structp png_ptr, png_infop info,
 | 
					extern void png_push_handle_tRNS PNGARG((png_structp png_ptr, png_infop info,
 | 
				
			||||||
   png_uint_32 length));
 | 
					   png_uint_32 length));
 | 
				
			||||||
extern void png_push_handle_hIST PNGARG((png_structp png_ptr, png_infop info,
 | 
					extern void png_push_handle_hIST PNGARG((png_structp png_ptr, png_infop info,
 | 
				
			||||||
   png_uint_32 length));
 | 
					   png_uint_32 length));
 | 
				
			||||||
extern void png_push_handle_tEXt PNGARG((png_structp png_ptr, png_infop info,
 | 
					 | 
				
			||||||
	png_uint_32 length));
 | 
					 | 
				
			||||||
extern void png_push_handle_zTXt PNGARG((png_structp png_ptr, png_infop info,
 | 
					 | 
				
			||||||
	png_uint_32 length));
 | 
					 | 
				
			||||||
extern void png_push_have_info PNGARG((png_structp png_ptr, png_infop info));
 | 
					extern void png_push_have_info PNGARG((png_structp png_ptr, png_infop info));
 | 
				
			||||||
extern void png_push_have_end PNGARG((png_structp png_ptr, png_infop info));
 | 
					extern void png_push_have_end PNGARG((png_structp png_ptr, png_infop info));
 | 
				
			||||||
extern void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row));
 | 
					extern void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row));
 | 
				
			||||||
@ -1298,12 +1308,12 @@ extern void png_process_some_data PNGARG((png_structp png_ptr,
 | 
				
			|||||||
   png_infop info));
 | 
					   png_infop info));
 | 
				
			||||||
extern void png_read_push_finish_row PNGARG((png_structp png_ptr));
 | 
					extern void png_read_push_finish_row PNGARG((png_structp png_ptr));
 | 
				
			||||||
#if defined(PNG_READ_tEXt_SUPPORTED)
 | 
					#if defined(PNG_READ_tEXt_SUPPORTED)
 | 
				
			||||||
extern void png_push_handle_tEXt PNGARG((png_structp png_ptr, png_infop info,
 | 
					extern void png_push_handle_tEXt PNGARG((png_structp png_ptr,
 | 
				
			||||||
   png_uint_32 length));
 | 
					   png_uint_32 length));
 | 
				
			||||||
extern void png_push_read_text PNGARG((png_structp png_ptr, png_infop info));
 | 
					extern void png_push_read_text PNGARG((png_structp png_ptr, png_infop info));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if defined(PNG_READ_zTXt_SUPPORTED)
 | 
					#if defined(PNG_READ_zTXt_SUPPORTED)
 | 
				
			||||||
extern void png_push_handle_zTXt PNGARG((png_structp png_ptr, png_infop info,
 | 
					extern void png_push_handle_zTXt PNGARG((png_structp png_ptr,
 | 
				
			||||||
   png_uint_32 length));
 | 
					   png_uint_32 length));
 | 
				
			||||||
extern void png_push_read_ztxt PNGARG((png_structp png_ptr, png_infop info));
 | 
					extern void png_push_read_ztxt PNGARG((png_structp png_ptr, png_infop info));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -65,5 +65,8 @@ version 0.85
 | 
				
			|||||||
version 0.86
 | 
					version 0.86
 | 
				
			||||||
   fixed bugs
 | 
					   fixed bugs
 | 
				
			||||||
   improved documentation
 | 
					   improved documentation
 | 
				
			||||||
 | 
					version 0.87
 | 
				
			||||||
 | 
						fixed medium model bugs
 | 
				
			||||||
 | 
						fixed other bugs introduced in 0.85 and 0.86
 | 
				
			||||||
 | 
					   added some minor documentation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,10 +1,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* pngconf.c - machine configurable file for libpng
 | 
					/* pngconf.c - machine configurable file for libpng
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Any machine specific code is near the front of this file, so if you
 | 
					/* Any machine specific code is near the front of this file, so if you
 | 
				
			||||||
@ -27,7 +27,7 @@
 | 
				
			|||||||
   Unless this gets smaller then the size of a row (compressed),
 | 
					   Unless this gets smaller then the size of a row (compressed),
 | 
				
			||||||
   it should not make much difference how big this is.  */
 | 
					   it should not make much difference how big this is.  */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PNG_ZBUF_SIZE 8192
 | 
					#define PNG_ZBUF_SIZE 32768
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* While libpng currently uses zlib for it's compression, it has been designed
 | 
					/* While libpng currently uses zlib for it's compression, it has been designed
 | 
				
			||||||
   to stand on it's own.  Towards this end, there are two defines that are
 | 
					   to stand on it's own.  Towards this end, there are two defines that are
 | 
				
			||||||
 | 
				
			|||||||
@ -1,10 +1,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* pngerror.c - stub functions for i/o and memory allocation
 | 
					/* pngerror.c - stub functions for i/o and memory allocation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	This file provides a location for all error handling.  Users which
 | 
						This file provides a location for all error handling.  Users which
 | 
				
			||||||
   need special error handling are expected to write replacement functions
 | 
					   need special error handling are expected to write replacement functions
 | 
				
			||||||
@ -42,6 +42,10 @@ png_warning(png_structp png_ptr, png_const_charp message)
 | 
				
			|||||||
		png_default_warning(png_ptr, message);
 | 
							png_default_warning(png_ptr, message);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* This is the default error handling function.  Note that replacements for
 | 
				
			||||||
 | 
						this function MUST NOT RETURN, or the program will likely crash.  This
 | 
				
			||||||
 | 
						function is used by default, or if the program supplies NULL for the
 | 
				
			||||||
 | 
						error function pointer in png_set_message_fn(). */
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
png_default_error(png_structp png_ptr, png_const_charp message)
 | 
					png_default_error(png_structp png_ptr, png_const_charp message)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										41
									
								
								pngio.c
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								pngio.c
									
									
									
									
									
								
							@ -1,10 +1,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* pngio.c - stub functions for i/o and memory allocation
 | 
					/* pngio.c - stub functions for i/o and memory allocation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   This file provides a location for all input/output.  Users which need
 | 
					   This file provides a location for all input/output.  Users which need
 | 
				
			||||||
	special handling are expected to write functions which have the same
 | 
						special handling are expected to write functions which have the same
 | 
				
			||||||
@ -164,7 +164,7 @@ png_default_read_data(png_structp png_ptr, png_bytep data, png_uint_32 length)
 | 
				
			|||||||
#else
 | 
					#else
 | 
				
			||||||
   /* this works in MSC also but with lost segment warning */
 | 
					   /* this works in MSC also but with lost segment warning */
 | 
				
			||||||
   n_data = (png_byte *)data;
 | 
					   n_data = (png_byte *)data;
 | 
				
			||||||
   if ((PNG_BYTEP )n_data == data)
 | 
					   if ((png_bytep)n_data == data)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
   {
 | 
					   {
 | 
				
			||||||
      check = fread(n_data, 1, (size_t)length, png_ptr->fp);
 | 
					      check = fread(n_data, 1, (size_t)length, png_ptr->fp);
 | 
				
			||||||
@ -196,16 +196,19 @@ png_default_read_data(png_structp png_ptr, png_bytep data, png_uint_32 length)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* This function is called to output any data pending writing (normally
 | 
				
			||||||
 | 
						to disk.  After png_flush is called, there should be no data pending
 | 
				
			||||||
 | 
						writing in any buffers. */
 | 
				
			||||||
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
 | 
					#if defined(PNG_WRITE_FLUSH_SUPPORTED)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
png_flush(png_struct *png_ptr)
 | 
					png_flush(png_structp png_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (png_ptr->output_flush_fn)
 | 
						if (png_ptr->output_flush_fn)
 | 
				
			||||||
		(*(png_ptr->output_flush_fn))(png_ptr);
 | 
							(*(png_ptr->output_flush_fn))(png_ptr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
png_default_flush(png_struct *png_ptr)
 | 
					png_default_flush(png_structp png_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (png_ptr->fp)
 | 
						if (png_ptr->fp)
 | 
				
			||||||
		fflush(png_ptr->fp);
 | 
							fflush(png_ptr->fp);
 | 
				
			||||||
@ -223,19 +226,20 @@ png_default_flush(png_struct *png_ptr)
 | 
				
			|||||||
						 arguments a pointer to a png_struct, a pointer to
 | 
											 arguments a pointer to a png_struct, a pointer to
 | 
				
			||||||
						 data to be written, and a 32-bit unsigned int which is
 | 
											 data to be written, and a 32-bit unsigned int which is
 | 
				
			||||||
						 the number of bytes to be written.  The new write
 | 
											 the number of bytes to be written.  The new write
 | 
				
			||||||
						 function should call png_error("Error msg")
 | 
											 function should call png_error(png_ptr, "Error msg")
 | 
				
			||||||
						 to exit and output any fatal error messages.
 | 
											 to exit and output any fatal error messages.
 | 
				
			||||||
	flush_data_fn - pointer to a new flush function which takes as its
 | 
						flush_data_fn - pointer to a new flush function which takes as its
 | 
				
			||||||
						 arguments a pointer to a png_struct.  After a call to
 | 
											 arguments a pointer to a png_struct.  After a call to
 | 
				
			||||||
						 the flush function, there should be no data in any buffers
 | 
											 the flush function, there should be no data in any buffers
 | 
				
			||||||
						 or pending transmission.  If the output method doesn't do
 | 
											 or pending transmission.  If the output method doesn't do
 | 
				
			||||||
						 any buffering of ouput, this parameter can be NULL.  If
 | 
											 any buffering of ouput, a function prototype must still be
 | 
				
			||||||
						 PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng
 | 
											 supplied although it doesn't have to do anything.  If
 | 
				
			||||||
						 compile time, output_flush_fn will be ignored, although
 | 
											 PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile
 | 
				
			||||||
						 it must be supplied for compatibility. */
 | 
											 time, output_flush_fn will be ignored, although it must be
 | 
				
			||||||
 | 
											 supplied for compatibility. */
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
png_set_write_fn(png_structp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn,
 | 
					png_set_write_fn(png_structp png_ptr, png_voidp io_ptr,
 | 
				
			||||||
	png_flush_ptr output_flush_fn)
 | 
						png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	png_ptr->io_ptr = io_ptr;
 | 
						png_ptr->io_ptr = io_ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -245,10 +249,10 @@ png_set_write_fn(png_structp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn
 | 
				
			|||||||
		png_ptr->write_data_fn = png_default_write_data;
 | 
							png_ptr->write_data_fn = png_default_write_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
 | 
					#if defined(PNG_WRITE_FLUSH_SUPPORTED)
 | 
				
			||||||
	if (output_flush_fn == NULL)
 | 
						if (output_flush_fn)
 | 
				
			||||||
		png_ptr->output_flush_fn = png_default_flush;
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		png_ptr->output_flush_fn = output_flush_fn;
 | 
							png_ptr->output_flush_fn = output_flush_fn;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							png_ptr->output_flush_fn = png_default_flush;
 | 
				
			||||||
#endif /* PNG_WRITE_FLUSH_SUPPORTED */
 | 
					#endif /* PNG_WRITE_FLUSH_SUPPORTED */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* It is an error to read while writing a png file */
 | 
						/* It is an error to read while writing a png file */
 | 
				
			||||||
@ -270,7 +274,8 @@ png_set_write_fn(png_structp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn
 | 
				
			|||||||
						To exit and output any fatal error messages the new write
 | 
											To exit and output any fatal error messages the new write
 | 
				
			||||||
                  function should call png_error(png_ptr, "Error msg"). */
 | 
					                  function should call png_error(png_ptr, "Error msg"). */
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
png_set_read_fn(png_struct *png_ptr, void *io_ptr, png_rw_ptr read_data_fn)
 | 
					png_set_read_fn(png_structp png_ptr, png_voidp io_ptr,
 | 
				
			||||||
 | 
						png_rw_ptr read_data_fn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	png_ptr->io_ptr = io_ptr;
 | 
						png_ptr->io_ptr = io_ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -291,8 +296,8 @@ png_set_read_fn(png_struct *png_ptr, void *io_ptr, png_rw_ptr read_data_fn)
 | 
				
			|||||||
/* This function returns a pointer to the io_ptr associated with the user
 | 
					/* This function returns a pointer to the io_ptr associated with the user
 | 
				
			||||||
	functions.  The application should free any memory associated with this
 | 
						functions.  The application should free any memory associated with this
 | 
				
			||||||
	pointer before png_write_destroy and png_read_destroy are called. */
 | 
						pointer before png_write_destroy and png_read_destroy are called. */
 | 
				
			||||||
void *
 | 
					png_voidp
 | 
				
			||||||
png_get_io_ptr(png_struct *png_ptr)
 | 
					png_get_io_ptr(png_structp png_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return png_ptr->io_ptr;
 | 
						return png_ptr->io_ptr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										174
									
								
								pngmem.c
									
									
									
									
									
								
							
							
						
						
									
										174
									
								
								pngmem.c
									
									
									
									
									
								
							@ -1,10 +1,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* pngmem.c - stub functions for memory allocation
 | 
					/* pngmem.c - stub functions for memory allocation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   This file provides a location for all memory allocation.  Users which
 | 
					   This file provides a location for all memory allocation.  Users which
 | 
				
			||||||
	need special memory handling are expected to modify the code in this file
 | 
						need special memory handling are expected to modify the code in this file
 | 
				
			||||||
@ -13,6 +13,160 @@
 | 
				
			|||||||
#define PNG_INTERNAL
 | 
					#define PNG_INTERNAL
 | 
				
			||||||
#include "png.h"
 | 
					#include "png.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Borland DOS special memory handler */
 | 
				
			||||||
 | 
					#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
 | 
				
			||||||
 | 
					/* if you change this, be sure to change the one in png.h also */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Allocate memory.  For reasonable files, size should never exceed
 | 
				
			||||||
 | 
						64K.  However, zlib may allocate more then 64K if you don't tell
 | 
				
			||||||
 | 
						it not to.  See zconf.h and png.h for more information. zlib does
 | 
				
			||||||
 | 
						need to allocate exactly 64K, so whatever you call here must
 | 
				
			||||||
 | 
						have the ability to do that. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Borland seems to have a problem in DOS mode for exactly 64K.
 | 
				
			||||||
 | 
						It gives you a segment with an offset of 8 (perhaps to store it's
 | 
				
			||||||
 | 
						memory stuff).  zlib doesn't like this at all, so we have to
 | 
				
			||||||
 | 
						detect and deal with it.  This code should not be needed in
 | 
				
			||||||
 | 
					   Windows or OS/2 modes, and only in 16 bit mode.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					png_voidp
 | 
				
			||||||
 | 
					png_large_malloc(png_structp png_ptr, png_uint_32 size)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						png_voidp ret;
 | 
				
			||||||
 | 
						if (!png_ptr || !size)
 | 
				
			||||||
 | 
							return ((voidp)0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef PNG_MAX_MALLOC_64K
 | 
				
			||||||
 | 
						if (size > (png_uint_32)65536L)
 | 
				
			||||||
 | 
							png_error(png_ptr, "Cannot Allocate > 64K");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (size == (png_uint_32)(65536L))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (!png_ptr->offset_table)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								/* try to see if we need to do any of this fancy stuff */
 | 
				
			||||||
 | 
								ret = farmalloc(size);
 | 
				
			||||||
 | 
								if (!ret || ((long)ret & 0xffff))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									int num_blocks;
 | 
				
			||||||
 | 
									png_uint_32 total_size;
 | 
				
			||||||
 | 
									png_bytep table;
 | 
				
			||||||
 | 
									int i;
 | 
				
			||||||
 | 
					            png_byte huge * hptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (ret)
 | 
				
			||||||
 | 
										farfree(ret);
 | 
				
			||||||
 | 
									ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									num_blocks = (int)(1 << (png_ptr->zlib_window_bits - 14));
 | 
				
			||||||
 | 
									if (num_blocks < 1)
 | 
				
			||||||
 | 
										num_blocks = 1;
 | 
				
			||||||
 | 
									if (png_ptr->zlib_mem_level >= 7)
 | 
				
			||||||
 | 
										num_blocks += (int)(1 << (png_ptr->zlib_mem_level - 7));
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
					            	num_blocks++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									total_size = ((png_uint_32)65536L) * (png_uint_32)num_blocks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									table = farmalloc(total_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (!table)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										png_error(png_ptr, "Out of Memory");
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if ((long)table & 0xffff)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										farfree(table);
 | 
				
			||||||
 | 
										total_size += (png_uint_32)65536L;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									table = farmalloc(total_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (!table)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										png_error(png_ptr, "Out of Memory");
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									png_ptr->offset_table = table;
 | 
				
			||||||
 | 
									png_ptr->offset_table_ptr = farmalloc(
 | 
				
			||||||
 | 
										num_blocks * sizeof (png_bytep));
 | 
				
			||||||
 | 
									hptr = (png_byte huge *)table;
 | 
				
			||||||
 | 
									if ((long)hptr & 0xffff)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										hptr = (png_byte huge *)((long)(hptr) & 0xffff0000L);
 | 
				
			||||||
 | 
										hptr += 65536L;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									for (i = 0; i < num_blocks; i++)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										png_ptr->offset_table_ptr[i] = (png_bytep)hptr;
 | 
				
			||||||
 | 
										hptr += 65536L;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									png_ptr->offset_table_number = num_blocks;
 | 
				
			||||||
 | 
									png_ptr->offset_table_count = 0;
 | 
				
			||||||
 | 
									png_ptr->offset_table_count_free = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (png_ptr->offset_table_count >= png_ptr->offset_table_number)
 | 
				
			||||||
 | 
									png_error(png_ptr, "Out of Memory");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         ret = png_ptr->offset_table_ptr[png_ptr->offset_table_count++];
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							ret = farmalloc(size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (ret == NULL)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							png_error(png_ptr, "Out of Memory");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* free a pointer allocated by png_large_malloc().  In the default
 | 
				
			||||||
 | 
					  configuration, png_ptr is not used, but is passed in case it
 | 
				
			||||||
 | 
					  is needed.  If ptr is NULL, return without taking any action. */
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					png_large_free(png_structp png_ptr, png_voidp ptr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (!png_ptr)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (ptr != NULL)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (png_ptr->offset_table)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								for (i = 0; i < png_ptr->offset_table_count; i++)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (ptr == png_ptr->offset_table_ptr[i])
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
										ptr = 0;
 | 
				
			||||||
 | 
					               png_ptr->offset_table_count_free++;
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (png_ptr->offset_table_count_free == png_ptr->offset_table_count)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									farfree(png_ptr->offset_table);
 | 
				
			||||||
 | 
									farfree(png_ptr->offset_table_ptr);
 | 
				
			||||||
 | 
									png_ptr->offset_table = 0;
 | 
				
			||||||
 | 
									png_ptr->offset_table_ptr = 0;
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (ptr)
 | 
				
			||||||
 | 
								farfree(ptr);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else /* Not the Borland DOS special memory handler */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Allocate memory.  For reasonable files, size should never exceed
 | 
					/* Allocate memory.  For reasonable files, size should never exceed
 | 
				
			||||||
	64K.  However, zlib may allocate more then 64K if you don't tell
 | 
						64K.  However, zlib may allocate more then 64K if you don't tell
 | 
				
			||||||
	it not to.  See zconf.h and png.h for more information. zlib does
 | 
						it not to.  See zconf.h and png.h for more information. zlib does
 | 
				
			||||||
@ -35,7 +189,11 @@ png_large_malloc(png_structp png_ptr, png_uint_32 size)
 | 
				
			|||||||
#if defined(__TURBOC__) && !defined(__FLAT__)
 | 
					#if defined(__TURBOC__) && !defined(__FLAT__)
 | 
				
			||||||
	ret = farmalloc(size);
 | 
						ret = farmalloc(size);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
 | 
					# if defined(_MSC_VER) && defined(MAXSEG_64K)
 | 
				
			||||||
 | 
						ret = halloc(size, 1);
 | 
				
			||||||
 | 
					# else
 | 
				
			||||||
	ret = malloc(size);
 | 
						ret = malloc(size);
 | 
				
			||||||
 | 
					# endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   if (ret == NULL)
 | 
					   if (ret == NULL)
 | 
				
			||||||
@ -60,15 +218,22 @@ png_large_free(png_structp png_ptr, png_voidp ptr)
 | 
				
			|||||||
#if defined(__TURBOC__) && !defined(__FLAT__)
 | 
					#if defined(__TURBOC__) && !defined(__FLAT__)
 | 
				
			||||||
		farfree(ptr);
 | 
							farfree(ptr);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
 | 
					# if defined(_MSC_VER) && defined(MAXSEG_64K)
 | 
				
			||||||
 | 
							hfree(ptr);
 | 
				
			||||||
 | 
					# else
 | 
				
			||||||
		free(ptr);
 | 
							free(ptr);
 | 
				
			||||||
 | 
					# endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* Not Borland DOS special memory handler */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Allocate memory.  This is called for smallish blocks only  It
 | 
					/* Allocate memory.  This is called for smallish blocks only  It
 | 
				
			||||||
	should not get anywhere near 64K.  On segmented machines, this
 | 
						should not get anywhere near 64K.  On segmented machines, this
 | 
				
			||||||
	must come from the local heap (for zlib). */
 | 
						must come from the local heap (for zlib).  Currently, zlib is
 | 
				
			||||||
 | 
						the only one that uses this, so you should only get one call
 | 
				
			||||||
 | 
						to this, and that a small block. */
 | 
				
			||||||
void *
 | 
					void *
 | 
				
			||||||
png_malloc(png_structp png_ptr, png_uint_32 size)
 | 
					png_malloc(png_structp png_ptr, png_uint_32 size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -96,7 +261,8 @@ png_malloc(png_structp png_ptr, png_uint_32 size)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Reallocate memory.  This will not get near 64K on a
 | 
					/* Reallocate memory.  This will not get near 64K on a
 | 
				
			||||||
	even marginally reasonable file. */
 | 
						even marginally reasonable file.  This is not used in
 | 
				
			||||||
 | 
						the current version of the library. */
 | 
				
			||||||
void *
 | 
					void *
 | 
				
			||||||
png_realloc(png_structp png_ptr, void * ptr, png_uint_32 size,
 | 
					png_realloc(png_structp png_ptr, void * ptr, png_uint_32 size,
 | 
				
			||||||
	png_uint_32 old_size)
 | 
						png_uint_32 old_size)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										87
									
								
								pngpread.c
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								pngpread.c
									
									
									
									
									
								
							@ -1,15 +1,17 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* pngpread.c - read a png file in push mode
 | 
					/* pngpread.c - read a png file in push mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PNG_INTERNAL
 | 
					#define PNG_INTERNAL
 | 
				
			||||||
#include "png.h"
 | 
					#include "png.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
png_process_data(png_structp png_ptr, png_infop info,
 | 
					png_process_data(png_structp png_ptr, png_infop info,
 | 
				
			||||||
	png_bytep buffer, png_uint_32 buffer_size)
 | 
						png_bytep buffer, png_uint_32 buffer_size)
 | 
				
			||||||
@ -110,7 +112,7 @@ png_push_read_chunk(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		png_push_fill_buffer(png_ptr, chunk_start, 8);
 | 
							png_push_fill_buffer(png_ptr, chunk_start, 8);
 | 
				
			||||||
		png_ptr->push_length = png_get_uint_32(chunk_start);
 | 
							png_ptr->push_length = png_get_uint_32(chunk_start);
 | 
				
			||||||
		memcpy(png_ptr->push_chunk_name, chunk_start + 4, 4);
 | 
							png_memcpy(png_ptr->push_chunk_name, (png_voidp)(chunk_start + 4), 4);
 | 
				
			||||||
		png_ptr->have_chunk_header = 1;
 | 
							png_ptr->have_chunk_header = 1;
 | 
				
			||||||
		png_reset_crc(png_ptr);
 | 
							png_reset_crc(png_ptr);
 | 
				
			||||||
		png_calculate_crc(png_ptr, chunk_start + 4, 4);
 | 
							png_calculate_crc(png_ptr, chunk_start + 4, 4);
 | 
				
			||||||
@ -142,7 +144,7 @@ png_push_read_chunk(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
		else
 | 
							else
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			png_push_handle_PLTE(png_ptr, info, png_ptr->push_length);
 | 
								png_push_handle_PLTE(png_ptr, png_ptr->push_length);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		png_ptr->mode = PNG_HAVE_PLTE;
 | 
							png_ptr->mode = PNG_HAVE_PLTE;
 | 
				
			||||||
@ -316,7 +318,7 @@ png_push_read_chunk(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
			png_ptr->mode == PNG_AFTER_IEND)
 | 
								png_ptr->mode == PNG_AFTER_IEND)
 | 
				
			||||||
			png_error(png_ptr, "Out of Place tEXt");
 | 
								png_error(png_ptr, "Out of Place tEXt");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		png_push_handle_tEXt(png_ptr, info, png_ptr->push_length);
 | 
							png_push_handle_tEXt(png_ptr, png_ptr->push_length);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if defined(PNG_READ_zTXt_SUPPORTED)
 | 
					#if defined(PNG_READ_zTXt_SUPPORTED)
 | 
				
			||||||
@ -326,7 +328,7 @@ png_push_read_chunk(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
			png_ptr->mode == PNG_AFTER_IEND)
 | 
								png_ptr->mode == PNG_AFTER_IEND)
 | 
				
			||||||
			png_error(png_ptr, "Out of Place zTXt");
 | 
								png_error(png_ptr, "Out of Place zTXt");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		png_push_handle_zTXt(png_ptr, info, png_ptr->push_length);
 | 
							png_push_handle_zTXt(png_ptr, png_ptr->push_length);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
@ -376,7 +378,7 @@ png_push_skip(png_structp png_ptr)
 | 
				
			|||||||
		png_ptr->skip_length -= save_size;
 | 
							png_ptr->skip_length -= save_size;
 | 
				
			||||||
		png_ptr->buffer_size -= save_size;
 | 
							png_ptr->buffer_size -= save_size;
 | 
				
			||||||
		png_ptr->save_buffer_size -= save_size;
 | 
							png_ptr->save_buffer_size -= save_size;
 | 
				
			||||||
		png_ptr->save_buffer_ptr += save_size;
 | 
							png_ptr->save_buffer_ptr += (png_size_t)save_size;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (png_ptr->skip_length && png_ptr->current_buffer_size)
 | 
						if (png_ptr->skip_length && png_ptr->current_buffer_size)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -392,7 +394,7 @@ png_push_skip(png_structp png_ptr)
 | 
				
			|||||||
		png_ptr->skip_length -= save_size;
 | 
							png_ptr->skip_length -= save_size;
 | 
				
			||||||
		png_ptr->buffer_size -= save_size;
 | 
							png_ptr->buffer_size -= save_size;
 | 
				
			||||||
		png_ptr->current_buffer_size -= save_size;
 | 
							png_ptr->current_buffer_size -= save_size;
 | 
				
			||||||
		png_ptr->current_buffer_ptr += save_size;
 | 
							png_ptr->current_buffer_ptr += (png_size_t)save_size;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (!png_ptr->skip_length && png_ptr->buffer_size >= 4)
 | 
						if (!png_ptr->skip_length && png_ptr->buffer_size >= 4)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -405,7 +407,7 @@ void
 | 
				
			|||||||
png_push_fill_buffer(png_structp png_ptr, png_bytep buffer,
 | 
					png_push_fill_buffer(png_structp png_ptr, png_bytep buffer,
 | 
				
			||||||
	png_uint_32 length)
 | 
						png_uint_32 length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	png_byte * ptr;
 | 
						png_bytep ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ptr = buffer;
 | 
						ptr = buffer;
 | 
				
			||||||
	if (png_ptr->save_buffer_size)
 | 
						if (png_ptr->save_buffer_size)
 | 
				
			||||||
@ -417,12 +419,12 @@ png_push_fill_buffer(png_structp png_ptr, png_bytep buffer,
 | 
				
			|||||||
		else
 | 
							else
 | 
				
			||||||
			save_size = png_ptr->save_buffer_size;
 | 
								save_size = png_ptr->save_buffer_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		memcpy(ptr, png_ptr->save_buffer_ptr, save_size);
 | 
							png_memcpy(ptr, png_ptr->save_buffer_ptr, (png_size_t)save_size);
 | 
				
			||||||
		length -= save_size;
 | 
							length -= save_size;
 | 
				
			||||||
		ptr += save_size;
 | 
							ptr += (png_size_t)save_size;
 | 
				
			||||||
		png_ptr->buffer_size -= save_size;
 | 
							png_ptr->buffer_size -= save_size;
 | 
				
			||||||
		png_ptr->save_buffer_size -= save_size;
 | 
							png_ptr->save_buffer_size -= save_size;
 | 
				
			||||||
		png_ptr->save_buffer_ptr += save_size;
 | 
							png_ptr->save_buffer_ptr += (png_size_t)save_size;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (length && png_ptr->current_buffer_size)
 | 
						if (length && png_ptr->current_buffer_size)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -433,10 +435,10 @@ png_push_fill_buffer(png_structp png_ptr, png_bytep buffer,
 | 
				
			|||||||
		else
 | 
							else
 | 
				
			||||||
			save_size = png_ptr->current_buffer_size;
 | 
								save_size = png_ptr->current_buffer_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		memcpy(ptr, png_ptr->current_buffer_ptr, save_size);
 | 
							png_memcpy(ptr, png_ptr->current_buffer_ptr, (png_size_t)save_size);
 | 
				
			||||||
		png_ptr->buffer_size -= save_size;
 | 
							png_ptr->buffer_size -= save_size;
 | 
				
			||||||
		png_ptr->current_buffer_size -= save_size;
 | 
							png_ptr->current_buffer_size -= save_size;
 | 
				
			||||||
		png_ptr->current_buffer_ptr += save_size;
 | 
							png_ptr->current_buffer_ptr += (png_size_t)save_size;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -448,8 +450,8 @@ png_push_save_buffer(png_structp png_ptr)
 | 
				
			|||||||
		if (png_ptr->save_buffer_ptr != png_ptr->save_buffer)
 | 
							if (png_ptr->save_buffer_ptr != png_ptr->save_buffer)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			int i;
 | 
								int i;
 | 
				
			||||||
			png_byte * sp;
 | 
								png_bytep sp;
 | 
				
			||||||
			png_byte * dp;
 | 
								png_bytep dp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			for (i = 0, sp = png_ptr->save_buffer_ptr, dp = png_ptr->save_buffer;
 | 
								for (i = 0, sp = png_ptr->save_buffer_ptr, dp = png_ptr->save_buffer;
 | 
				
			||||||
				i < png_ptr->save_buffer_size;
 | 
									i < png_ptr->save_buffer_size;
 | 
				
			||||||
@ -463,22 +465,24 @@ png_push_save_buffer(png_structp png_ptr)
 | 
				
			|||||||
		png_ptr->save_buffer_max)
 | 
							png_ptr->save_buffer_max)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		int new_max;
 | 
							int new_max;
 | 
				
			||||||
		png_byte * old_buffer;
 | 
							png_bytep old_buffer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		new_max = png_ptr->save_buffer_size +
 | 
							new_max = (int)(png_ptr->save_buffer_size +
 | 
				
			||||||
			png_ptr->current_buffer_size + 256;
 | 
								png_ptr->current_buffer_size + 256);
 | 
				
			||||||
		old_buffer = png_ptr->save_buffer;
 | 
							old_buffer = png_ptr->save_buffer;
 | 
				
			||||||
		png_ptr->save_buffer = (png_byte *)
 | 
							png_ptr->save_buffer = (png_bytep)
 | 
				
			||||||
			png_large_malloc(png_ptr, new_max);
 | 
								png_large_malloc(png_ptr, new_max);
 | 
				
			||||||
		memcpy(png_ptr->save_buffer, old_buffer,
 | 
							png_memcpy(png_ptr->save_buffer, old_buffer,
 | 
				
			||||||
			png_ptr->save_buffer_size);
 | 
								(png_size_t)png_ptr->save_buffer_size);
 | 
				
			||||||
		png_large_free(png_ptr, old_buffer);
 | 
							png_large_free(png_ptr, old_buffer);
 | 
				
			||||||
		  png_ptr->save_buffer_max = new_max;
 | 
							  png_ptr->save_buffer_max = new_max;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (png_ptr->current_buffer_size)
 | 
						if (png_ptr->current_buffer_size)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		memcpy(png_ptr->save_buffer + png_ptr->save_buffer_size,
 | 
							png_memcpy(png_ptr->save_buffer +
 | 
				
			||||||
			png_ptr->current_buffer_ptr, png_ptr->current_buffer_size);
 | 
								(png_size_t)png_ptr->save_buffer_size,
 | 
				
			||||||
 | 
								png_ptr->current_buffer_ptr,
 | 
				
			||||||
 | 
								(png_size_t)png_ptr->current_buffer_size);
 | 
				
			||||||
		png_ptr->save_buffer_size += png_ptr->current_buffer_size;
 | 
							png_ptr->save_buffer_size += png_ptr->current_buffer_size;
 | 
				
			||||||
		png_ptr->current_buffer_size = 0;
 | 
							png_ptr->current_buffer_size = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -511,7 +515,8 @@ png_push_read_idat(png_structp png_ptr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		png_push_fill_buffer(png_ptr, chunk_start, 8);
 | 
							png_push_fill_buffer(png_ptr, chunk_start, 8);
 | 
				
			||||||
		png_ptr->push_length = png_get_uint_32(chunk_start);
 | 
							png_ptr->push_length = png_get_uint_32(chunk_start);
 | 
				
			||||||
		memcpy(png_ptr->push_chunk_name, chunk_start + 4, 4);
 | 
							png_memcpy(png_ptr->push_chunk_name,
 | 
				
			||||||
 | 
								(png_voidp)(chunk_start + 4), 4);
 | 
				
			||||||
		png_ptr->have_chunk_header = 1;
 | 
							png_ptr->have_chunk_header = 1;
 | 
				
			||||||
		png_reset_crc(png_ptr);
 | 
							png_reset_crc(png_ptr);
 | 
				
			||||||
		png_calculate_crc(png_ptr, chunk_start + 4, 4);
 | 
							png_calculate_crc(png_ptr, chunk_start + 4, 4);
 | 
				
			||||||
@ -540,7 +545,7 @@ png_push_read_idat(png_structp png_ptr)
 | 
				
			|||||||
		png_ptr->idat_size -= save_size;
 | 
							png_ptr->idat_size -= save_size;
 | 
				
			||||||
		png_ptr->buffer_size -= save_size;
 | 
							png_ptr->buffer_size -= save_size;
 | 
				
			||||||
		png_ptr->save_buffer_size -= save_size;
 | 
							png_ptr->save_buffer_size -= save_size;
 | 
				
			||||||
		png_ptr->save_buffer_ptr += save_size;
 | 
							png_ptr->save_buffer_ptr += (png_size_t)save_size;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (png_ptr->idat_size && png_ptr->current_buffer_size)
 | 
						if (png_ptr->idat_size && png_ptr->current_buffer_size)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -557,7 +562,7 @@ png_push_read_idat(png_structp png_ptr)
 | 
				
			|||||||
		png_ptr->idat_size -= save_size;
 | 
							png_ptr->idat_size -= save_size;
 | 
				
			||||||
		png_ptr->buffer_size -= save_size;
 | 
							png_ptr->buffer_size -= save_size;
 | 
				
			||||||
		png_ptr->current_buffer_size -= save_size;
 | 
							png_ptr->current_buffer_size -= save_size;
 | 
				
			||||||
		png_ptr->current_buffer_ptr += save_size;
 | 
							png_ptr->current_buffer_ptr += (png_size_t)save_size;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (!png_ptr->idat_size && png_ptr->buffer_size >= 4)
 | 
						if (!png_ptr->idat_size && png_ptr->buffer_size >= 4)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -785,14 +790,14 @@ png_read_push_finish_row(png_structp png_ptr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
png_push_handle_PLTE(png_structp png_ptr, png_infop info, png_uint_32 length)
 | 
					png_push_handle_PLTE(png_structp png_ptr, png_uint_32 length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (length % 3)
 | 
						if (length % 3)
 | 
				
			||||||
		png_error(png_ptr, "Invalid Palette Chunk");
 | 
							png_error(png_ptr, "Invalid Palette Chunk");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	png_ptr->num_palette = length / 3;
 | 
						png_ptr->num_palette = (png_uint_16)(length / 3);
 | 
				
			||||||
	png_ptr->cur_palette = 0;
 | 
						png_ptr->cur_palette = 0;
 | 
				
			||||||
	png_ptr->palette = (png_colorp)png_malloc(png_ptr,
 | 
						png_ptr->palette = (png_colorp)png_large_malloc(png_ptr,
 | 
				
			||||||
		png_ptr->num_palette * sizeof (png_color));
 | 
							png_ptr->num_palette * sizeof (png_color));
 | 
				
			||||||
	png_ptr->process_mode = PNG_READ_PLTE_MODE;
 | 
						png_ptr->process_mode = PNG_READ_PLTE_MODE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -828,8 +833,7 @@ png_push_read_plte(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if defined(PNG_READ_tEXt_SUPPORTED)
 | 
					#if defined(PNG_READ_tEXt_SUPPORTED)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
png_push_handle_tEXt(png_structp png_ptr, png_infop info,
 | 
					png_push_handle_tEXt(png_structp png_ptr, png_uint_32 length)
 | 
				
			||||||
	png_uint_32 length)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	png_ptr->current_text = (png_charp)png_large_malloc(png_ptr, length + 1);
 | 
						png_ptr->current_text = (png_charp)png_large_malloc(png_ptr, length + 1);
 | 
				
			||||||
	png_ptr->current_text[(png_size_t)length] = '\0';
 | 
						png_ptr->current_text[(png_size_t)length] = '\0';
 | 
				
			||||||
@ -855,7 +859,7 @@ png_push_read_text(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
		png_calculate_crc(png_ptr, (png_bytep)png_ptr->current_text_ptr,
 | 
							png_calculate_crc(png_ptr, (png_bytep)png_ptr->current_text_ptr,
 | 
				
			||||||
			text_size);
 | 
								text_size);
 | 
				
			||||||
		png_ptr->current_text_left -= text_size;
 | 
							png_ptr->current_text_left -= text_size;
 | 
				
			||||||
		png_ptr->current_text_ptr += text_size;
 | 
							png_ptr->current_text_ptr += (png_size_t)text_size;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (!(png_ptr->current_text_left) && png_ptr->buffer_size >= 4)
 | 
						if (!(png_ptr->current_text_left) && png_ptr->buffer_size >= 4)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -882,7 +886,7 @@ png_push_read_text(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if defined(PNG_READ_zTXt_SUPPORTED)
 | 
					#if defined(PNG_READ_zTXt_SUPPORTED)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
png_push_handle_zTXt(png_structp png_ptr, png_infop info,
 | 
					png_push_handle_zTXt(png_structp png_ptr,
 | 
				
			||||||
	png_uint_32 length)
 | 
						png_uint_32 length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	png_ptr->current_text = (png_charp)png_large_malloc(png_ptr, length + 1);
 | 
						png_ptr->current_text = (png_charp)png_large_malloc(png_ptr, length + 1);
 | 
				
			||||||
@ -909,7 +913,7 @@ png_push_read_ztxt(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
		png_calculate_crc(png_ptr, (png_bytep)png_ptr->current_text_ptr,
 | 
							png_calculate_crc(png_ptr, (png_bytep)png_ptr->current_text_ptr,
 | 
				
			||||||
			text_size);
 | 
								text_size);
 | 
				
			||||||
		png_ptr->current_text_left -= text_size;
 | 
							png_ptr->current_text_left -= text_size;
 | 
				
			||||||
		png_ptr->current_text_ptr += text_size;
 | 
							png_ptr->current_text_ptr += (png_size_t)text_size;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (!(png_ptr->current_text_left) && png_ptr->buffer_size >= 4)
 | 
						if (!(png_ptr->current_text_left) && png_ptr->buffer_size >= 4)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -923,8 +927,6 @@ png_push_read_ztxt(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
		key = png_ptr->current_text;
 | 
							key = png_ptr->current_text;
 | 
				
			||||||
		png_ptr->current_text = 0;
 | 
							png_ptr->current_text = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		text = NULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		for (text = key; *text; text++)
 | 
							for (text = key; *text; text++)
 | 
				
			||||||
			/* empty loop */ ;
 | 
								/* empty loop */ ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -971,7 +973,7 @@ png_push_read_ztxt(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				if (!text)
 | 
									if (!text)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					text = (png_charp)png_malloc(png_ptr,
 | 
										text = (png_charp)png_large_malloc(png_ptr,
 | 
				
			||||||
						png_ptr->zbuf_size - png_ptr->zstream->avail_out +
 | 
											png_ptr->zbuf_size - png_ptr->zstream->avail_out +
 | 
				
			||||||
							key_size + 1);
 | 
												key_size + 1);
 | 
				
			||||||
					png_memcpy(text + (png_size_t)key_size, png_ptr->zbuf,
 | 
										png_memcpy(text + (png_size_t)key_size, png_ptr->zbuf,
 | 
				
			||||||
@ -1073,7 +1075,7 @@ png_push_read_end(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		png_push_fill_buffer(png_ptr, chunk_start, 8);
 | 
							png_push_fill_buffer(png_ptr, chunk_start, 8);
 | 
				
			||||||
		png_ptr->push_length = png_get_uint_32(chunk_start);
 | 
							png_ptr->push_length = png_get_uint_32(chunk_start);
 | 
				
			||||||
		memcpy(png_ptr->push_chunk_name, chunk_start + 4, 4);
 | 
							png_memcpy(png_ptr->push_chunk_name, (png_voidp)(chunk_start + 4), 4);
 | 
				
			||||||
		png_ptr->have_chunk_header = 1;
 | 
							png_ptr->have_chunk_header = 1;
 | 
				
			||||||
		png_reset_crc(png_ptr);
 | 
							png_reset_crc(png_ptr);
 | 
				
			||||||
		png_calculate_crc(png_ptr, chunk_start + 4, 4);
 | 
							png_calculate_crc(png_ptr, chunk_start + 4, 4);
 | 
				
			||||||
@ -1173,7 +1175,7 @@ png_push_read_end(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
			png_ptr->mode == PNG_AFTER_IEND)
 | 
								png_ptr->mode == PNG_AFTER_IEND)
 | 
				
			||||||
			png_error(png_ptr, "Out of Place tEXt");
 | 
								png_error(png_ptr, "Out of Place tEXt");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		png_push_handle_tEXt(png_ptr, info, png_ptr->push_length);
 | 
							png_push_handle_tEXt(png_ptr, png_ptr->push_length);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if defined(PNG_READ_zTXt_SUPPORTED)
 | 
					#if defined(PNG_READ_zTXt_SUPPORTED)
 | 
				
			||||||
@ -1183,7 +1185,7 @@ png_push_read_end(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
			png_ptr->mode == PNG_AFTER_IEND)
 | 
								png_ptr->mode == PNG_AFTER_IEND)
 | 
				
			||||||
			png_error(png_ptr, "Out of Place zTXt");
 | 
								png_error(png_ptr, "Out of Place zTXt");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		png_push_handle_zTXt(png_ptr, info, png_ptr->push_length);
 | 
							png_push_handle_zTXt(png_ptr, png_ptr->push_length);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
@ -1214,6 +1216,9 @@ void
 | 
				
			|||||||
png_progressive_combine_row (png_structp png_ptr,
 | 
					png_progressive_combine_row (png_structp png_ptr,
 | 
				
			||||||
	png_bytep old_row, png_bytep new_row)
 | 
						png_bytep old_row, png_bytep new_row)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						if (new_row)
 | 
				
			||||||
		png_combine_row(png_ptr, old_row, png_pass_dsp_mask[png_ptr->pass]);
 | 
							png_combine_row(png_ptr, old_row, png_pass_dsp_mask[png_ptr->pass]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										40
									
								
								pngrcb.c
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								pngrcb.c
									
									
									
									
									
								
							@ -1,9 +1,9 @@
 | 
				
			|||||||
/* pngrcb.c - callbacks while reading a png file
 | 
					/* pngrcb.c - callbacks while reading 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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PNG_INTERNAL
 | 
					#define PNG_INTERNAL
 | 
				
			||||||
@ -20,11 +20,11 @@ png_read_IHDR(png_structp png_ptr, png_infop info,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
   info->width = width;
 | 
					   info->width = width;
 | 
				
			||||||
   info->height = height;
 | 
					   info->height = height;
 | 
				
			||||||
   info->bit_depth = bit_depth;
 | 
						info->bit_depth = (png_byte)bit_depth;
 | 
				
			||||||
   info->color_type = color_type;
 | 
						info->color_type =(png_byte) color_type;
 | 
				
			||||||
   info->compression_type = compression_type;
 | 
						info->compression_type = (png_byte)compression_type;
 | 
				
			||||||
   info->filter_type = filter_type;
 | 
						info->filter_type = (png_byte)filter_type;
 | 
				
			||||||
	info->interlace_type = interlace_type;
 | 
						info->interlace_type = (png_byte)interlace_type;
 | 
				
			||||||
   if (info->color_type == PNG_COLOR_TYPE_PALETTE)
 | 
					   if (info->color_type == PNG_COLOR_TYPE_PALETTE)
 | 
				
			||||||
      info->channels = 1;
 | 
					      info->channels = 1;
 | 
				
			||||||
   else if (info->color_type & PNG_COLOR_MASK_COLOR)
 | 
					   else if (info->color_type & PNG_COLOR_MASK_COLOR)
 | 
				
			||||||
@ -33,7 +33,7 @@ png_read_IHDR(png_structp png_ptr, png_infop info,
 | 
				
			|||||||
      info->channels = 1;
 | 
					      info->channels = 1;
 | 
				
			||||||
   if (info->color_type & PNG_COLOR_MASK_ALPHA)
 | 
					   if (info->color_type & PNG_COLOR_MASK_ALPHA)
 | 
				
			||||||
      info->channels++;
 | 
					      info->channels++;
 | 
				
			||||||
   info->pixel_depth = info->channels * info->bit_depth;
 | 
						info->pixel_depth = (png_byte)(info->channels * info->bit_depth);
 | 
				
			||||||
   info->rowbytes = ((info->width * info->pixel_depth + 7) >> 3);
 | 
					   info->rowbytes = ((info->width * info->pixel_depth + 7) >> 3);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -45,7 +45,7 @@ png_read_PLTE(png_structp png_ptr, png_infop info,
 | 
				
			|||||||
      return;
 | 
					      return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   info->palette = palette;
 | 
					   info->palette = palette;
 | 
				
			||||||
   info->num_palette = num;
 | 
						info->num_palette = (png_uint_16)num;
 | 
				
			||||||
   info->valid |= PNG_INFO_PLTE;
 | 
					   info->valid |= PNG_INFO_PLTE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -112,7 +112,7 @@ png_read_tRNS(png_structp png_ptr, png_infop info,
 | 
				
			|||||||
      png_memcpy(&(info->trans_values), trans_values,
 | 
					      png_memcpy(&(info->trans_values), trans_values,
 | 
				
			||||||
         sizeof(png_color_16));
 | 
					         sizeof(png_color_16));
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   info->num_trans = num_trans;
 | 
						info->num_trans = (png_uint_16)num_trans;
 | 
				
			||||||
   info->valid |= PNG_INFO_tRNS;
 | 
					   info->valid |= PNG_INFO_tRNS;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@ -152,7 +152,7 @@ png_read_pHYs(png_structp png_ptr, png_infop info,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
   info->x_pixels_per_unit = res_x;
 | 
					   info->x_pixels_per_unit = res_x;
 | 
				
			||||||
   info->y_pixels_per_unit = res_y;
 | 
					   info->y_pixels_per_unit = res_y;
 | 
				
			||||||
   info->phys_unit_type = unit_type;
 | 
						info->phys_unit_type = (png_byte)unit_type;
 | 
				
			||||||
   info->valid |= PNG_INFO_pHYs;
 | 
					   info->valid |= PNG_INFO_pHYs;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@ -167,7 +167,7 @@ png_read_oFFs(png_structp png_ptr, png_infop info,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
   info->x_offset = offset_x;
 | 
					   info->x_offset = offset_x;
 | 
				
			||||||
   info->y_offset = offset_y;
 | 
					   info->y_offset = offset_y;
 | 
				
			||||||
   info->offset_unit_type = unit_type;
 | 
					   info->offset_unit_type = (png_byte)unit_type;
 | 
				
			||||||
   info->valid |= PNG_INFO_oFFs;
 | 
					   info->valid |= PNG_INFO_oFFs;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@ -201,15 +201,21 @@ png_read_zTXt(png_structp png_ptr, png_infop info,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
         old_max = info->max_text;
 | 
					         old_max = info->max_text;
 | 
				
			||||||
			info->max_text = info->num_text + 16;
 | 
								info->max_text = info->num_text + 16;
 | 
				
			||||||
			info->text = (png_textp)png_realloc(png_ptr,
 | 
								{
 | 
				
			||||||
            info->text,
 | 
									png_textp old_text;
 | 
				
			||||||
            info->max_text * sizeof (png_text),
 | 
					
 | 
				
			||||||
				old_max * sizeof (png_text));
 | 
									old_text = info->text;
 | 
				
			||||||
 | 
									info->text = (png_textp)png_large_malloc(png_ptr,
 | 
				
			||||||
 | 
										info->max_text * sizeof (png_text));
 | 
				
			||||||
 | 
									png_memcpy(info->text, old_text,
 | 
				
			||||||
 | 
										(png_size_t)(old_max * sizeof (png_text)));
 | 
				
			||||||
 | 
									png_large_free(png_ptr, old_text);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
         info->max_text = info->num_text + 16;
 | 
					         info->max_text = info->num_text + 16;
 | 
				
			||||||
         info->text = (png_textp)png_malloc(png_ptr,
 | 
					         info->text = (png_textp)png_large_malloc(png_ptr,
 | 
				
			||||||
            info->max_text * sizeof (png_text));
 | 
					            info->max_text * sizeof (png_text));
 | 
				
			||||||
         info->num_text = 0;
 | 
					         info->num_text = 0;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										60
									
								
								pngread.c
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								pngread.c
									
									
									
									
									
								
							@ -1,10 +1,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* pngread.c - read a png file
 | 
					/* 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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
   Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
					   Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PNG_INTERNAL
 | 
					#define PNG_INTERNAL
 | 
				
			||||||
@ -36,7 +36,7 @@ png_read_init(png_structp png_ptr)
 | 
				
			|||||||
   png_ptr->zstream = (z_stream *)png_malloc(png_ptr, sizeof (z_stream));
 | 
					   png_ptr->zstream = (z_stream *)png_malloc(png_ptr, sizeof (z_stream));
 | 
				
			||||||
   png_ptr->zstream->zalloc = png_zalloc;
 | 
					   png_ptr->zstream->zalloc = png_zalloc;
 | 
				
			||||||
   png_ptr->zstream->zfree = png_zfree;
 | 
					   png_ptr->zstream->zfree = png_zfree;
 | 
				
			||||||
   png_ptr->zstream->opaque = (voidp)png_ptr;
 | 
					   png_ptr->zstream->opaque = (voidpf)png_ptr;
 | 
				
			||||||
   inflateInit(png_ptr->zstream);
 | 
					   inflateInit(png_ptr->zstream);
 | 
				
			||||||
   png_ptr->zstream->next_out = png_ptr->zbuf;
 | 
					   png_ptr->zstream->next_out = png_ptr->zbuf;
 | 
				
			||||||
   png_ptr->zstream->avail_out = (uInt)png_ptr->zbuf_size;
 | 
					   png_ptr->zstream->avail_out = (uInt)png_ptr->zbuf_size;
 | 
				
			||||||
@ -630,23 +630,13 @@ png_read_destroy(png_structp png_ptr, png_infop info, png_infop end_info)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
   if (info)
 | 
					   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)
 | 
					#if defined(PNG_READ_tEXt_SUPPORTED) || defined(PNG_READ_zTXt_SUPPORTED)
 | 
				
			||||||
      for (i = 0; i < info->num_text; i++)
 | 
					      for (i = 0; i < info->num_text; i++)
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
         png_large_free(png_ptr, info->text[i].key);
 | 
					         png_large_free(png_ptr, info->text[i].key);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		png_free(png_ptr, info->text);
 | 
					      png_large_free(png_ptr, info->text);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
      png_memset(info, 0, sizeof(png_info));
 | 
					      png_memset(info, 0, sizeof(png_info));
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
@ -659,7 +649,7 @@ png_read_destroy(png_structp png_ptr, png_infop info, png_infop end_info)
 | 
				
			|||||||
         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
 | 
					#endif
 | 
				
			||||||
      png_memset(end_info, 0, sizeof(png_info));
 | 
					      png_memset(end_info, 0, sizeof(png_info));
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
@ -669,56 +659,58 @@ png_read_destroy(png_structp png_ptr, png_infop info, png_infop end_info)
 | 
				
			|||||||
   png_large_free(png_ptr, png_ptr->prev_row);
 | 
					   png_large_free(png_ptr, png_ptr->prev_row);
 | 
				
			||||||
#if defined(PNG_READ_DITHER_SUPPORTED)
 | 
					#if defined(PNG_READ_DITHER_SUPPORTED)
 | 
				
			||||||
   png_large_free(png_ptr, png_ptr->palette_lookup);
 | 
					   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
 | 
					#endif
 | 
				
			||||||
#if defined(PNG_READ_GAMMA_SUPPORTED)
 | 
					#if defined(PNG_READ_GAMMA_SUPPORTED)
 | 
				
			||||||
	png_free(png_ptr, png_ptr->gamma_table);
 | 
					   png_large_free(png_ptr, png_ptr->gamma_table);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if defined(PNG_READ_BACKGROUND_SUPPORTED)
 | 
					#if defined(PNG_READ_BACKGROUND_SUPPORTED)
 | 
				
			||||||
   png_free(png_ptr, png_ptr->gamma_from_1);
 | 
					   png_large_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_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
 | 
					#endif
 | 
				
			||||||
#if defined(PNG_READ_GAMMA_SUPPORTED)
 | 
					#if defined(PNG_READ_GAMMA_SUPPORTED)
 | 
				
			||||||
   if (png_ptr->gamma_16_table)
 | 
					   if (png_ptr->gamma_16_table)
 | 
				
			||||||
   {
 | 
					   {
 | 
				
			||||||
      for (i = 0; i < (1 << (8 - png_ptr->gamma_shift)); i++)
 | 
					      for (i = 0; i < (1 << (8 - png_ptr->gamma_shift)); i++)
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
         png_free(png_ptr, png_ptr->gamma_16_table[i]);
 | 
					         png_large_free(png_ptr, png_ptr->gamma_16_table[i]);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if defined(PNG_READ_BACKGROUND_SUPPORTED)
 | 
					#if defined(PNG_READ_BACKGROUND_SUPPORTED)
 | 
				
			||||||
   png_free(png_ptr, png_ptr->gamma_16_table);
 | 
					   png_large_free(png_ptr, png_ptr->gamma_16_table);
 | 
				
			||||||
   if (png_ptr->gamma_16_from_1)
 | 
					   if (png_ptr->gamma_16_from_1)
 | 
				
			||||||
   {
 | 
					   {
 | 
				
			||||||
      for (i = 0; i < (1 << (8 - png_ptr->gamma_shift)); i++)
 | 
					      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_from_1[i]);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   png_free(png_ptr, png_ptr->gamma_16_from_1);
 | 
					   png_large_free(png_ptr, png_ptr->gamma_16_from_1);
 | 
				
			||||||
   if (png_ptr->gamma_16_to_1)
 | 
					   if (png_ptr->gamma_16_to_1)
 | 
				
			||||||
   {
 | 
					   {
 | 
				
			||||||
      for (i = 0; i < (1 << (8 - png_ptr->gamma_shift)); i++)
 | 
					      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
 | 
					#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);
 | 
					   inflateEnd(png_ptr->zstream);
 | 
				
			||||||
   png_free(png_ptr, png_ptr->zstream);
 | 
					   png_free(png_ptr, png_ptr->zstream);
 | 
				
			||||||
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 | 
					#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 | 
				
			||||||
	png_free(png_ptr, png_ptr->save_buffer);
 | 
					   png_large_free(png_ptr, png_ptr->save_buffer);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
   png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
 | 
					   png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
 | 
				
			||||||
   png_memset(png_ptr, 0, sizeof (png_struct));
 | 
					   png_memset(png_ptr, 0, sizeof (png_struct));
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										366
									
								
								pngrtran.c
									
									
									
									
									
								
							
							
						
						
									
										366
									
								
								pngrtran.c
									
									
									
									
									
								
							@ -1,10 +1,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* pngrtran.c - transforms the data in a row for png readers
 | 
					/* pngrtran.c - transforms the data in a row for png readers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PNG_INTERNAL
 | 
					#define PNG_INTERNAL
 | 
				
			||||||
@ -21,8 +21,8 @@ png_set_background(png_structp png_ptr,
 | 
				
			|||||||
   png_memcpy(&(png_ptr->background), background_color,
 | 
					   png_memcpy(&(png_ptr->background), background_color,
 | 
				
			||||||
      sizeof(png_color_16));
 | 
					      sizeof(png_color_16));
 | 
				
			||||||
   png_ptr->background_gamma = (float)background_gamma;
 | 
					   png_ptr->background_gamma = (float)background_gamma;
 | 
				
			||||||
   png_ptr->background_gamma_type = background_gamma_code;
 | 
						png_ptr->background_gamma_type = (png_byte)(background_gamma_code);
 | 
				
			||||||
   png_ptr->background_expand = need_expand;
 | 
						png_ptr->background_expand = (png_byte)need_expand;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -63,10 +63,10 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
 | 
				
			|||||||
   {
 | 
					   {
 | 
				
			||||||
      int i;
 | 
					      int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      png_ptr->dither_index = (png_bytep)png_malloc(png_ptr,
 | 
					      png_ptr->dither_index = (png_bytep)png_large_malloc(png_ptr,
 | 
				
			||||||
         num_palette * sizeof (png_byte));
 | 
					         num_palette * sizeof (png_byte));
 | 
				
			||||||
      for (i = 0; i < num_palette; i++)
 | 
					      for (i = 0; i < num_palette; i++)
 | 
				
			||||||
         png_ptr->dither_index[i] = i;
 | 
								png_ptr->dither_index[i] = (png_byte)i;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   if (num_palette > maximum_colors)
 | 
					   if (num_palette > maximum_colors)
 | 
				
			||||||
@ -80,11 +80,11 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
 | 
				
			|||||||
			png_bytep sort;
 | 
								png_bytep sort;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         /* initialize an array to sort colors */
 | 
					         /* initialize an array to sort colors */
 | 
				
			||||||
         sort = (png_bytep)png_malloc(png_ptr, num_palette * sizeof (png_byte));
 | 
					         sort = (png_bytep)png_large_malloc(png_ptr, num_palette * sizeof (png_byte));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         /* initialize the sort array */
 | 
					         /* initialize the sort array */
 | 
				
			||||||
         for (i = 0; i < num_palette; i++)
 | 
					         for (i = 0; i < num_palette; i++)
 | 
				
			||||||
            sort[i] = i;
 | 
									sort[i] = (png_byte)i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         /* find the least used palette entries by starting a
 | 
					         /* find the least used palette entries by starting a
 | 
				
			||||||
            bubble sort, and running it until we have sorted
 | 
					            bubble sort, and running it until we have sorted
 | 
				
			||||||
@ -155,8 +155,8 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
 | 
				
			|||||||
                  palette[j] = palette[i];
 | 
					                  palette[j] = palette[i];
 | 
				
			||||||
                  palette[i] = tmp_color;
 | 
					                  palette[i] = tmp_color;
 | 
				
			||||||
                  /* indicate where the color went */
 | 
					                  /* indicate where the color went */
 | 
				
			||||||
                  png_ptr->dither_index[j] = i;
 | 
											png_ptr->dither_index[j] = (png_byte)i;
 | 
				
			||||||
                  png_ptr->dither_index[i] = j;
 | 
											png_ptr->dither_index[i] = (png_byte)j;
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            /* find closest color for those colors we are not
 | 
					            /* find closest color for those colors we are not
 | 
				
			||||||
@ -186,11 +186,11 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
 | 
				
			|||||||
                     }
 | 
					                     }
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
						/* point to closest color */
 | 
											/* point to closest color */
 | 
				
			||||||
                  png_ptr->dither_index[i] = min_j;
 | 
											png_ptr->dither_index[i] = (png_byte)min_j;
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
         png_free(png_ptr, sort);
 | 
					         png_large_free(png_ptr, sort);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -210,19 +210,19 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
 | 
				
			|||||||
            /* which original index points to this palette color */
 | 
					            /* which original index points to this palette color */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         /* initialize palette index arrays */
 | 
					         /* initialize palette index arrays */
 | 
				
			||||||
         index_to_palette = (png_bytep)png_malloc(png_ptr,
 | 
					         index_to_palette = (png_bytep)png_large_malloc(png_ptr,
 | 
				
			||||||
            num_palette * sizeof (png_byte));
 | 
					            num_palette * sizeof (png_byte));
 | 
				
			||||||
         palette_to_index = (png_bytep)png_malloc(png_ptr,
 | 
					         palette_to_index = (png_bytep)png_large_malloc(png_ptr,
 | 
				
			||||||
            num_palette * sizeof (png_byte));
 | 
					            num_palette * sizeof (png_byte));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         /* initialize the sort array */
 | 
					         /* initialize the sort array */
 | 
				
			||||||
         for (i = 0; i < num_palette; i++)
 | 
					         for (i = 0; i < num_palette; i++)
 | 
				
			||||||
         {
 | 
					         {
 | 
				
			||||||
            index_to_palette[i] = i;
 | 
									index_to_palette[i] = (png_byte)i;
 | 
				
			||||||
            palette_to_index[i] = i;
 | 
									palette_to_index[i] = (png_byte)i;
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         hash = (png_dsortpp)png_malloc(png_ptr, 769 * sizeof (png_dsortp));
 | 
					         hash = (png_dsortpp)png_large_malloc(png_ptr, 769 * sizeof (png_dsortp));
 | 
				
			||||||
         for (i = 0; i < 769; i++)
 | 
					         for (i = 0; i < 769; i++)
 | 
				
			||||||
            hash[i] = (png_dsortp)0;
 | 
					            hash[i] = (png_dsortp)0;
 | 
				
			||||||
/*         png_memset(hash, 0, 769 * sizeof (png_dsortp)); */
 | 
					/*         png_memset(hash, 0, 769 * sizeof (png_dsortp)); */
 | 
				
			||||||
@ -255,10 +255,10 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
 | 
				
			|||||||
                  {
 | 
					                  {
 | 
				
			||||||
                     png_dsortp t;
 | 
					                     png_dsortp t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                     t = png_malloc(png_ptr, sizeof (png_dsort));
 | 
					                     t = png_large_malloc(png_ptr, sizeof (png_dsort));
 | 
				
			||||||
                     t->next = hash[d];
 | 
					                     t->next = hash[d];
 | 
				
			||||||
                     t->left = i;
 | 
												t->left = (png_byte)i;
 | 
				
			||||||
                     t->right = j;
 | 
												t->right = (png_byte)j;
 | 
				
			||||||
                     hash[d] = t;
 | 
					                     hash[d] = t;
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
@ -313,8 +313,8 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
 | 
				
			|||||||
                        palette_to_index[index_to_palette[j]] =
 | 
					                        palette_to_index[index_to_palette[j]] =
 | 
				
			||||||
                           palette_to_index[num_new_palette];
 | 
					                           palette_to_index[num_new_palette];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        index_to_palette[j] = num_new_palette;
 | 
													index_to_palette[j] = (png_byte)num_new_palette;
 | 
				
			||||||
                        palette_to_index[num_new_palette] = j;
 | 
													palette_to_index[num_new_palette] = (png_byte)j;
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                     if (num_new_palette <= maximum_colors)
 | 
					                     if (num_new_palette <= maximum_colors)
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
@ -336,7 +336,7 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
 | 
				
			|||||||
							png_dsortp t;
 | 
												png_dsortp t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                     t = p->next;
 | 
					                     t = p->next;
 | 
				
			||||||
                     png_free(png_ptr, p);
 | 
					                     png_large_free(png_ptr, p);
 | 
				
			||||||
                     p = t;
 | 
					                     p = t;
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
@ -344,9 +344,9 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            max_d += 96;
 | 
					            max_d += 96;
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
         png_free(png_ptr, hash);
 | 
					         png_large_free(png_ptr, hash);
 | 
				
			||||||
         png_free(png_ptr, palette_to_index);
 | 
					         png_large_free(png_ptr, palette_to_index);
 | 
				
			||||||
         png_free(png_ptr, index_to_palette);
 | 
					         png_large_free(png_ptr, index_to_palette);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      num_palette = maximum_colors;
 | 
					      num_palette = maximum_colors;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
@ -355,7 +355,7 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
 | 
				
			|||||||
      png_ptr->palette = palette;
 | 
					      png_ptr->palette = palette;
 | 
				
			||||||
      png_ptr->user_palette = 1;
 | 
					      png_ptr->user_palette = 1;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   png_ptr->num_palette = num_palette;
 | 
						png_ptr->num_palette = (png_uint_16)num_palette;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   if (full_dither)
 | 
					   if (full_dither)
 | 
				
			||||||
   {
 | 
					   {
 | 
				
			||||||
@ -415,8 +415,8 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                  if (d < distance[index])
 | 
					                  if (d < distance[index])
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
                     distance[index] = d;
 | 
												distance[index] = (png_byte)d;
 | 
				
			||||||
                     png_ptr->palette_lookup[index] = i;
 | 
												png_ptr->palette_lookup[index] = (png_byte)i;
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -485,13 +485,13 @@ png_init_read_transformations(png_structp png_ptr)
 | 
				
			|||||||
         switch (png_ptr->bit_depth)
 | 
					         switch (png_ptr->bit_depth)
 | 
				
			||||||
         {
 | 
					         {
 | 
				
			||||||
            case 1:
 | 
					            case 1:
 | 
				
			||||||
               png_ptr->background.gray *= 0xff;
 | 
										png_ptr->background.gray *= (png_byte)0xff;
 | 
				
			||||||
               break;
 | 
					               break;
 | 
				
			||||||
            case 2:
 | 
					            case 2:
 | 
				
			||||||
               png_ptr->background.gray *= 0x55;
 | 
										png_ptr->background.gray *= (png_byte)0x55;
 | 
				
			||||||
               break;
 | 
					               break;
 | 
				
			||||||
            case 4:
 | 
					            case 4:
 | 
				
			||||||
               png_ptr->background.gray *= 0x11;
 | 
										png_ptr->background.gray *= (png_byte)0x11;
 | 
				
			||||||
               break;
 | 
					               break;
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -672,7 +672,8 @@ png_read_transform_info(png_structp png_ptr, png_infop info_ptr)
 | 
				
			|||||||
      info_ptr->channels = 1;
 | 
					      info_ptr->channels = 1;
 | 
				
			||||||
   if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)
 | 
					   if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)
 | 
				
			||||||
      info_ptr->channels++;
 | 
					      info_ptr->channels++;
 | 
				
			||||||
   info_ptr->pixel_depth = info_ptr->channels * info_ptr->bit_depth;
 | 
						info_ptr->pixel_depth = (png_byte)(info_ptr->channels *
 | 
				
			||||||
 | 
							info_ptr->bit_depth);
 | 
				
			||||||
   info_ptr->rowbytes = ((info_ptr->width * info_ptr->pixel_depth + 7) >> 3);
 | 
					   info_ptr->rowbytes = ((info_ptr->width * info_ptr->pixel_depth + 7) >> 3);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -796,7 +797,7 @@ png_do_unpack(png_row_infop row_info, png_bytep row)
 | 
				
			|||||||
            shift = 7 - (int)((row_info->width + 7) & 7);
 | 
					            shift = 7 - (int)((row_info->width + 7) & 7);
 | 
				
			||||||
            for (i = 0; i < row_info->width; i++)
 | 
					            for (i = 0; i < row_info->width; i++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
               *dp = (*sp >> shift) & 0x1;
 | 
										*dp = (png_byte)((*sp >> shift) & 0x1);
 | 
				
			||||||
               if (shift == 7)
 | 
					               if (shift == 7)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  shift = 0;
 | 
					                  shift = 0;
 | 
				
			||||||
@ -817,7 +818,7 @@ png_do_unpack(png_row_infop row_info, png_bytep row)
 | 
				
			|||||||
            shift = (int)((3 - ((row_info->width + 3) & 3)) << 1);
 | 
					            shift = (int)((3 - ((row_info->width + 3) & 3)) << 1);
 | 
				
			||||||
            for (i = 0; i < row_info->width; i++)
 | 
					            for (i = 0; i < row_info->width; i++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
               *dp = (*sp >> shift) & 0x3;
 | 
										*dp = (png_byte)((*sp >> shift) & 0x3);
 | 
				
			||||||
               if (shift == 6)
 | 
					               if (shift == 6)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  shift = 0;
 | 
					                  shift = 0;
 | 
				
			||||||
@ -837,7 +838,7 @@ png_do_unpack(png_row_infop row_info, png_bytep row)
 | 
				
			|||||||
            shift = (int)((1 - ((row_info->width + 1) & 1)) << 2);
 | 
					            shift = (int)((1 - ((row_info->width + 1) & 1)) << 2);
 | 
				
			||||||
            for (i = 0; i < row_info->width; i++)
 | 
					            for (i = 0; i < row_info->width; i++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
               *dp = (*sp >> shift) & 0xf;
 | 
										*dp = (png_byte)((*sp >> shift) & 0xf);
 | 
				
			||||||
               if (shift == 4)
 | 
					               if (shift == 4)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  shift = 0;
 | 
					                  shift = 0;
 | 
				
			||||||
@ -852,7 +853,7 @@ png_do_unpack(png_row_infop row_info, png_bytep row)
 | 
				
			|||||||
         }
 | 
					         }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      row_info->bit_depth = 8;
 | 
					      row_info->bit_depth = 8;
 | 
				
			||||||
      row_info->pixel_depth = 8 * row_info->channels;
 | 
							row_info->pixel_depth = (png_byte)(8 * row_info->channels);
 | 
				
			||||||
      row_info->rowbytes = row_info->width * row_info->channels;
 | 
					      row_info->rowbytes = row_info->width * row_info->channels;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -896,8 +897,8 @@ png_do_unshift(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		for (i = 0; i < channels; i++)
 | 
							for (i = 0; i < channels; i++)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (shift[i] <= 0)
 | 
								if (shift[(png_size_t)i] <= 0)
 | 
				
			||||||
				shift[i] = 0;
 | 
									shift[(png_size_t)i] = 0;
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				value = 1;
 | 
									value = 1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -922,7 +923,7 @@ png_do_unshift(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
         {
 | 
					         {
 | 
				
			||||||
            png_byte  mask;
 | 
					            png_byte  mask;
 | 
				
			||||||
				mask = (png_byte)(((int)0xf0 >> shift[0]) & (int)0xf0) |
 | 
									mask = (png_byte)(((int)0xf0 >> shift[0]) & (int)0xf0) |
 | 
				
			||||||
               ((int)0xf >> shift[0]);
 | 
										(png_byte)((int)0xf >> shift[0]);
 | 
				
			||||||
            for (bp = row, i = 0;
 | 
					            for (bp = row, i = 0;
 | 
				
			||||||
               i < row_info->rowbytes;
 | 
					               i < row_info->rowbytes;
 | 
				
			||||||
               i++, bp++)
 | 
					               i++, bp++)
 | 
				
			||||||
@ -955,10 +956,10 @@ png_do_unshift(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
               for (c = 0; c < row_info->channels; c++, bp += 2)
 | 
					               for (c = 0; c < row_info->channels; c++, bp += 2)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  value = (*bp << 8) + *(bp + 1);
 | 
											value = (png_uint_16)((*bp << 8) + *(bp + 1));
 | 
				
			||||||
                  value >>= shift[c];
 | 
					                  value >>= shift[c];
 | 
				
			||||||
						*bp = value >> 8;
 | 
											*bp = (png_byte)(value >> 8);
 | 
				
			||||||
                  *(bp + 1) = value & 0xff;
 | 
					                  *(bp + 1) = (png_byte)(value & 0xff);
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
@ -991,7 +992,7 @@ png_do_chop(png_row_infop row_info, png_bytep row)
 | 
				
			|||||||
         dp++;
 | 
					         dp++;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      row_info->bit_depth = 8;
 | 
					      row_info->bit_depth = 8;
 | 
				
			||||||
      row_info->pixel_depth = 8 * row_info->channels;
 | 
							row_info->pixel_depth = (png_byte)(8 * row_info->channels);
 | 
				
			||||||
      row_info->rowbytes = row_info->width * row_info->channels;
 | 
					      row_info->rowbytes = row_info->width * row_info->channels;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -1125,9 +1126,10 @@ png_do_gray_to_rgb(png_row_infop row_info, png_bytep row)
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      row_info->channels += 2;
 | 
							row_info->channels += (png_byte)2;
 | 
				
			||||||
      row_info->color_type |= PNG_COLOR_MASK_COLOR;
 | 
					      row_info->color_type |= PNG_COLOR_MASK_COLOR;
 | 
				
			||||||
      row_info->pixel_depth = row_info->channels * row_info->bit_depth;
 | 
							row_info->pixel_depth = (png_byte)(row_info->channels *
 | 
				
			||||||
 | 
								row_info->bit_depth);
 | 
				
			||||||
      row_info->rowbytes = ((row_info->width *
 | 
					      row_info->rowbytes = ((row_info->width *
 | 
				
			||||||
         row_info->pixel_depth + 7) >> 3);
 | 
					         row_info->pixel_depth + 7) >> 3);
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
@ -1175,9 +1177,9 @@ png_build_grayscale_palette(int bit_depth, png_colorp palette)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
   for (i = 0, v = 0; i < num_palette; i++, v += color_inc)
 | 
					   for (i = 0, v = 0; i < num_palette; i++, v += color_inc)
 | 
				
			||||||
   {
 | 
					   {
 | 
				
			||||||
      palette[i].red = v;
 | 
							palette[i].red = (png_byte)v;
 | 
				
			||||||
      palette[i].green = v;
 | 
							palette[i].green = (png_byte)v;
 | 
				
			||||||
      palette[i].blue = v;
 | 
							palette[i].blue = (png_byte)v;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1262,9 +1264,9 @@ png_correct_palette(png_structp png_ptr, png_colorp palette,
 | 
				
			|||||||
         {
 | 
					         {
 | 
				
			||||||
            if (palette[i].red == png_ptr->trans_values.gray)
 | 
					            if (palette[i].red == png_ptr->trans_values.gray)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
               palette[i].red = back;
 | 
										palette[i].red = (png_byte)back;
 | 
				
			||||||
               palette[i].green = back;
 | 
										palette[i].green = (png_byte)back;
 | 
				
			||||||
               palette[i].blue = back;
 | 
										palette[i].blue = (png_byte)back;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -1384,8 +1386,8 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                     if (((*sp >> shift) & 0x1) ==
 | 
					                     if (((*sp >> shift) & 0x1) ==
 | 
				
			||||||
                        trans_values->gray)
 | 
					                        trans_values->gray)
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        *sp &= ((0x7f7f >> (7 - shift)) & 0xff);
 | 
													*sp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);
 | 
				
			||||||
                        *sp |= (background->gray << shift);
 | 
													*sp |= (png_byte)(background->gray << shift);
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                     if (!shift)
 | 
					                     if (!shift)
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
@ -1406,8 +1408,8 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                     if (((*sp >> shift) & 0x3) ==
 | 
					                     if (((*sp >> shift) & 0x3) ==
 | 
				
			||||||
                        trans_values->gray)
 | 
					                        trans_values->gray)
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        *sp &= ((0x3f3f >> (6 - shift)) & 0xff);
 | 
													*sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
 | 
				
			||||||
                        *sp |= (background->gray << shift);
 | 
													*sp |= (png_byte)(background->gray << shift);
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                     if (!shift)
 | 
					                     if (!shift)
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
@ -1428,8 +1430,8 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                     if (((*sp >> shift) & 0xf) ==
 | 
					                     if (((*sp >> shift) & 0xf) ==
 | 
				
			||||||
                        trans_values->gray)
 | 
					                        trans_values->gray)
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        *sp &= ((0xf0f >> (4 - shift)) & 0xff);
 | 
													*sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
 | 
				
			||||||
                        *sp |= (background->gray << shift);
 | 
													*sp |= (png_byte)(background->gray << shift);
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                     if (!shift)
 | 
					                     if (!shift)
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
@ -1484,19 +1486,19 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        png_uint_16 v;
 | 
					                        png_uint_16 v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        v = ((png_uint_16)(*sp) << 8) +
 | 
													v = (png_uint_16)(((png_uint_16)(*sp) << 8) +
 | 
				
			||||||
                           (png_uint_16)(*(sp + 1));
 | 
														(png_uint_16)(*(sp + 1)));
 | 
				
			||||||
                        if (v == trans_values->gray)
 | 
					                        if (v == trans_values->gray)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                           *sp = (background->gray >> 8) & 0xff;
 | 
														*sp = (png_byte)((background->gray >> 8) & 0xff);
 | 
				
			||||||
                           *(sp + 1) = background->gray & 0xff;
 | 
														*(sp + 1) = (png_byte)(background->gray & 0xff);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                           v = gamma_16[
 | 
					                           v = gamma_16[
 | 
				
			||||||
										*(sp + 1) >> gamma_shift][*sp];
 | 
															*(sp + 1) >> gamma_shift][*sp];
 | 
				
			||||||
                           *sp = (v >> 8) & 0xff;
 | 
														*sp = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                           *(sp + 1) = v & 0xff;
 | 
					                           *(sp + 1) = (png_byte)(v & 0xff);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
							}
 | 
												}
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
@ -1508,12 +1510,12 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        png_uint_16 v;
 | 
					                        png_uint_16 v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        v = ((png_uint_16)(*sp) << 8) +
 | 
													v = (png_uint_16)(((png_uint_16)(*sp) << 8) +
 | 
				
			||||||
                           (png_uint_16)(*(sp + 1));
 | 
														(png_uint_16)(*(sp + 1)));
 | 
				
			||||||
                        if (v == trans_values->gray)
 | 
					                        if (v == trans_values->gray)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                           *sp = (background->gray >> 8) & 0xff;
 | 
														*sp = (png_byte)((background->gray >> 8) & 0xff);
 | 
				
			||||||
                           *(sp + 1) = background->gray & 0xff;
 | 
														*(sp + 1) = (png_byte)(background->gray & 0xff);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
@ -1575,38 +1577,38 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
						{
 | 
											{
 | 
				
			||||||
							png_uint_16 r, g, b;
 | 
												png_uint_16 r, g, b;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                     r = ((png_uint_16)(*sp) << 8) +
 | 
												r = (png_uint_16)(((png_uint_16)(*sp) << 8) +
 | 
				
			||||||
                        (png_uint_16)(*(sp + 1));
 | 
													(png_uint_16)(*(sp + 1)));
 | 
				
			||||||
                     g = ((png_uint_16)(*(sp + 2)) << 8) +
 | 
												g = (png_uint_16)(((png_uint_16)(*(sp + 2)) << 8) +
 | 
				
			||||||
                        (png_uint_16)(*(sp + 3));
 | 
													(png_uint_16)(*(sp + 3)));
 | 
				
			||||||
                     b = ((png_uint_16)(*(sp + 4)) << 8) +
 | 
												b = (png_uint_16)(((png_uint_16)(*(sp + 4)) << 8) +
 | 
				
			||||||
                        (png_uint_16)(*(sp + 5));
 | 
													(png_uint_16)(*(sp + 5)));
 | 
				
			||||||
                     if (r == trans_values->red &&
 | 
					                     if (r == trans_values->red &&
 | 
				
			||||||
                        g == trans_values->green &&
 | 
					                        g == trans_values->green &&
 | 
				
			||||||
                        b == trans_values->blue)
 | 
					                        b == trans_values->blue)
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        *sp = (background->red >> 8) & 0xff;
 | 
													*sp = (png_byte)((background->red >> 8) & 0xff);
 | 
				
			||||||
                        *(sp + 1) = background->red & 0xff;
 | 
													*(sp + 1) = (png_byte)(background->red & 0xff);
 | 
				
			||||||
                        *(sp + 2) = (background->green >> 8) & 0xff;
 | 
													*(sp + 2) = (png_byte)((background->green >> 8) & 0xff);
 | 
				
			||||||
                        *(sp + 3) = background->green & 0xff;
 | 
													*(sp + 3) = (png_byte)(background->green & 0xff);
 | 
				
			||||||
                        *(sp + 4) = (background->blue >> 8) & 0xff;
 | 
													*(sp + 4) = (png_byte)((background->blue >> 8) & 0xff);
 | 
				
			||||||
                        *(sp + 5) = background->blue & 0xff;
 | 
													*(sp + 5) = (png_byte)(background->blue & 0xff);
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                     else
 | 
					                     else
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        png_uint_16 v;
 | 
					                        png_uint_16 v;
 | 
				
			||||||
                        v = gamma_16[
 | 
					                        v = gamma_16[
 | 
				
			||||||
                           *(sp + 1) >> gamma_shift][*sp];
 | 
					                           *(sp + 1) >> gamma_shift][*sp];
 | 
				
			||||||
                        *sp = (v >> 8) & 0xff;
 | 
													*sp = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                        *(sp + 1) = v & 0xff;
 | 
					                        *(sp + 1) = (png_byte)(v & 0xff);
 | 
				
			||||||
                        v = gamma_16[
 | 
					                        v = gamma_16[
 | 
				
			||||||
                           *(sp + 3) >> gamma_shift][*(sp + 2)];
 | 
					                           *(sp + 3) >> gamma_shift][*(sp + 2)];
 | 
				
			||||||
                        *(sp + 2) = (v >> 8) & 0xff;
 | 
													*(sp + 2) = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                        *(sp + 3) = v & 0xff;
 | 
													*(sp + 3) = (png_byte)(v & 0xff);
 | 
				
			||||||
								v = gamma_16[
 | 
													v = gamma_16[
 | 
				
			||||||
                           *(sp + 5) >> gamma_shift][*(sp + 4)];
 | 
					                           *(sp + 5) >> gamma_shift][*(sp + 4)];
 | 
				
			||||||
                        *(sp + 4) = (v >> 8) & 0xff;
 | 
													*(sp + 4) = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                        *(sp + 5) = v & 0xff;
 | 
													*(sp + 5) = (png_byte)(v & 0xff);
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
@ -1618,22 +1620,22 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                  {
 | 
					                  {
 | 
				
			||||||
                     png_uint_16 r, g, b;
 | 
					                     png_uint_16 r, g, b;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                     r = ((png_uint_16)(*sp) << 8) +
 | 
												r = (png_uint_16)(((png_uint_16)(*sp) << 8) +
 | 
				
			||||||
                        (png_uint_16)(*(sp + 1));
 | 
													(png_uint_16)(*(sp + 1)));
 | 
				
			||||||
                     g = ((png_uint_16)(*(sp + 2)) << 8) +
 | 
												g = (png_uint_16)(((png_uint_16)(*(sp + 2)) << 8) +
 | 
				
			||||||
                        (png_uint_16)(*(sp + 3));
 | 
													(png_uint_16)(*(sp + 3)));
 | 
				
			||||||
                     b = ((png_uint_16)(*(sp + 4)) << 8) +
 | 
												b = (png_uint_16)(((png_uint_16)(*(sp + 4)) << 8) +
 | 
				
			||||||
                        (png_uint_16)(*(sp + 5));
 | 
													(png_uint_16)(*(sp + 5)));
 | 
				
			||||||
                     if (r == trans_values->red &&
 | 
					                     if (r == trans_values->red &&
 | 
				
			||||||
                        g == trans_values->green &&
 | 
					                        g == trans_values->green &&
 | 
				
			||||||
                        b == trans_values->blue)
 | 
					                        b == trans_values->blue)
 | 
				
			||||||
							{
 | 
												{
 | 
				
			||||||
                        *sp = (background->red >> 8) & 0xff;
 | 
													*sp = (png_byte)((background->red >> 8) & 0xff);
 | 
				
			||||||
                        *(sp + 1) = background->red & 0xff;
 | 
													*(sp + 1) = (png_byte)(background->red & 0xff);
 | 
				
			||||||
                        *(sp + 2) = (background->green >> 8) & 0xff;
 | 
													*(sp + 2) = (png_byte)((background->green >> 8) & 0xff);
 | 
				
			||||||
                        *(sp + 3) = background->green & 0xff;
 | 
													*(sp + 3) = (png_byte)(background->green & 0xff);
 | 
				
			||||||
                        *(sp + 4) = (background->blue >> 8) & 0xff;
 | 
													*(sp + 4) = (png_byte)((background->blue >> 8) & 0xff);
 | 
				
			||||||
                        *(sp + 5) = background->blue & 0xff;
 | 
													*(sp + 5) = (png_byte)(background->blue & 0xff);
 | 
				
			||||||
							}
 | 
												}
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
@ -1669,9 +1671,9 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                           png_uint_16 v;
 | 
					                           png_uint_16 v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                           v = gamma_to_1[*sp];
 | 
					                           v = gamma_to_1[*sp];
 | 
				
			||||||
                           v = ((png_uint_16)(v) * a +
 | 
														v = (png_uint_16)(((png_uint_16)(v) * a +
 | 
				
			||||||
										(png_uint_16)background_1->gray *
 | 
															(png_uint_16)background_1->gray *
 | 
				
			||||||
                              (255 - a) + 127) / 255;
 | 
					                              (255 - a) + 127) / 255);
 | 
				
			||||||
                           *dp = gamma_from_1[v];
 | 
					                           *dp = gamma_from_1[v];
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
@ -1696,9 +1698,9 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                           *dp = ((png_uint_16)(*sp) * a +
 | 
														*dp = (png_byte)(((png_uint_16)(*sp) * a +
 | 
				
			||||||
										(png_uint_16)background_1->gray *
 | 
															(png_uint_16)background_1->gray *
 | 
				
			||||||
                              (255 - a) + 127) / 255;
 | 
															(255 - a) + 127) / 255);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
@ -1715,8 +1717,8 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        png_uint_16 a;
 | 
					                        png_uint_16 a;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        a = ((png_uint_16)(*(sp + 2)) << 8) +
 | 
													a = (png_uint_16)(((png_uint_16)(*(sp + 2)) << 8) +
 | 
				
			||||||
                           (png_uint_16)(*(sp + 3));
 | 
														(png_uint_16)(*(sp + 3)));
 | 
				
			||||||
                        if (a == (png_uint_16)0xffff)
 | 
					                        if (a == (png_uint_16)0xffff)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                           png_uint_32 v;
 | 
					                           png_uint_32 v;
 | 
				
			||||||
@ -1728,8 +1730,8 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else if (a == 0)
 | 
					                        else if (a == 0)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                           *dp = (background->gray >> 8) & 0xff;
 | 
					                           *dp = (png_byte)((background->gray >> 8) & 0xff);
 | 
				
			||||||
                           *(dp + 1) = background->gray & 0xff;
 | 
					                           *(dp + 1) = (png_byte)(background->gray & 0xff);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
@ -1757,16 +1759,16 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        png_uint_16 a;
 | 
					                        png_uint_16 a;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        a = ((png_uint_16)(*(sp + 2)) << 8) +
 | 
													a = (png_uint_16)(((png_uint_16)(*(sp + 2)) << 8) +
 | 
				
			||||||
                           (png_uint_16)(*(sp + 3));
 | 
														(png_uint_16)(*(sp + 3)));
 | 
				
			||||||
                        if (a == (png_uint_16)0xffff)
 | 
					                        if (a == (png_uint_16)0xffff)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                           png_memcpy(dp, sp, 2);
 | 
					                           png_memcpy(dp, sp, 2);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else if (a == 0)
 | 
					                        else if (a == 0)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                           *dp = (background->gray >> 8) & 0xff;
 | 
														*dp = (png_byte)((background->gray >> 8) & 0xff);
 | 
				
			||||||
                           *(dp + 1) = background->gray & 0xff;
 | 
														*(dp + 1) = (png_byte)(background->gray & 0xff);
 | 
				
			||||||
								}
 | 
													}
 | 
				
			||||||
								else
 | 
													else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
@ -1819,19 +1821,19 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                        png_uint_16 v;
 | 
					                        png_uint_16 v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        v = gamma_to_1[*sp];
 | 
					                        v = gamma_to_1[*sp];
 | 
				
			||||||
                        v = ((png_uint_16)(v) * a +
 | 
													v = (png_uint_16)(((png_uint_16)(v) * a +
 | 
				
			||||||
									(png_uint_16)background_1->red *
 | 
														(png_uint_16)background_1->red *
 | 
				
			||||||
                           (255 - a) + 127) / 255;
 | 
														(255 - a) + 127) / 255);
 | 
				
			||||||
                        *dp = gamma_from_1[v];
 | 
					                        *dp = gamma_from_1[v];
 | 
				
			||||||
                        v = gamma_to_1[*(sp + 1)];
 | 
					                        v = gamma_to_1[*(sp + 1)];
 | 
				
			||||||
                        v = ((png_uint_16)(v) * a +
 | 
													v = (png_uint_16)(((png_uint_16)(v) * a +
 | 
				
			||||||
									(png_uint_16)background_1->green *
 | 
														(png_uint_16)background_1->green *
 | 
				
			||||||
                           (255 - a) + 127) / 255;
 | 
														(255 - a) + 127) / 255);
 | 
				
			||||||
                        *(dp + 1) = gamma_from_1[v];
 | 
					                        *(dp + 1) = gamma_from_1[v];
 | 
				
			||||||
                        v = gamma_to_1[*(sp + 2)];
 | 
					                        v = gamma_to_1[*(sp + 2)];
 | 
				
			||||||
                        v = ((png_uint_16)(v) * a +
 | 
													v = (png_uint_16)(((png_uint_16)(v) * a +
 | 
				
			||||||
									(png_uint_16)background_1->blue *
 | 
														(png_uint_16)background_1->blue *
 | 
				
			||||||
                           (255 - a) + 127) / 255;
 | 
														(255 - a) + 127) / 255);
 | 
				
			||||||
                        *(dp + 2) = gamma_from_1[v];
 | 
					                        *(dp + 2) = gamma_from_1[v];
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
@ -1860,15 +1862,15 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                     }
 | 
					                     }
 | 
				
			||||||
                     else
 | 
					                     else
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        *dp = ((png_uint_16)(*sp) * a +
 | 
													*dp = (png_byte)(((png_uint_16)(*sp) * a +
 | 
				
			||||||
									(png_uint_16)background->red *
 | 
														(png_uint_16)background->red *
 | 
				
			||||||
                           (255 - a) + 127) / 255;
 | 
														(255 - a) + 127) / 255);
 | 
				
			||||||
                        *(dp + 1) = ((png_uint_16)(*(sp + 1)) * a +
 | 
													*(dp + 1) = (png_byte)(((png_uint_16)(*(sp + 1)) * a +
 | 
				
			||||||
									(png_uint_16)background->green *
 | 
														(png_uint_16)background->green *
 | 
				
			||||||
                           (255 - a) + 127) / 255;
 | 
														(255 - a) + 127) / 255);
 | 
				
			||||||
                        *(dp + 2) = ((png_uint_16)(*(sp + 2)) * a +
 | 
													*(dp + 2) = (png_byte)(((png_uint_16)(*(sp + 2)) * a +
 | 
				
			||||||
									(png_uint_16)background->blue *
 | 
														(png_uint_16)background->blue *
 | 
				
			||||||
                           (255 - a) + 127) / 255;
 | 
														(255 - a) + 127) / 255);
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
@ -1884,33 +1886,33 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                  {
 | 
					                  {
 | 
				
			||||||
                     png_uint_16 a;
 | 
					                     png_uint_16 a;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                     a = ((png_uint_16)(*(sp + 6)) << 8) +
 | 
												a = (png_uint_16)(((png_uint_16)(*(sp + 6)) << 8) +
 | 
				
			||||||
                        (png_uint_16)(*(sp + 7));
 | 
													(png_uint_16)(*(sp + 7)));
 | 
				
			||||||
                     if (a == (png_uint_16)0xffff)
 | 
					                     if (a == (png_uint_16)0xffff)
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        png_uint_16 v;
 | 
					                        png_uint_16 v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        v = gamma_16[
 | 
					                        v = gamma_16[
 | 
				
			||||||
                           *(sp + 1) >> gamma_shift][*sp];
 | 
					                           *(sp + 1) >> gamma_shift][*sp];
 | 
				
			||||||
                        *dp = (v >> 8) & 0xff;
 | 
													*dp = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                        *(dp + 1) = v & 0xff;
 | 
													*(dp + 1) = (png_byte)(v & 0xff);
 | 
				
			||||||
                        v = gamma_16[
 | 
					                        v = gamma_16[
 | 
				
			||||||
                           *(sp + 3) >> gamma_shift][*(sp + 2)];
 | 
					                           *(sp + 3) >> gamma_shift][*(sp + 2)];
 | 
				
			||||||
                        *(dp + 2) = (v >> 8) & 0xff;
 | 
													*(dp + 2) = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                        *(dp + 3) = v & 0xff;
 | 
													*(dp + 3) = (png_byte)(v & 0xff);
 | 
				
			||||||
								v = gamma_16[
 | 
													v = gamma_16[
 | 
				
			||||||
									*(sp + 5) >> gamma_shift][*(sp + 4)];
 | 
														*(sp + 5) >> gamma_shift][*(sp + 4)];
 | 
				
			||||||
                        *(dp + 4) = (v >> 8) & 0xff;
 | 
													*(dp + 4) = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                        *(dp + 5) = v & 0xff;
 | 
													*(dp + 5) = (png_byte)(v & 0xff);
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                     else if (a == 0)
 | 
					                     else if (a == 0)
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        *dp = (background->red >> 8) & 0xff;
 | 
													*dp = (png_byte)((background->red >> 8) & 0xff);
 | 
				
			||||||
                        *(dp + 1) = background->red & 0xff;
 | 
													*(dp + 1) = (png_byte)(background->red & 0xff);
 | 
				
			||||||
                        *(dp + 2) = (background->green >> 8) & 0xff;
 | 
													*(dp + 2) = (png_byte)((background->green >> 8) & 0xff);
 | 
				
			||||||
                        *(dp + 3) = background->green & 0xff;
 | 
													*(dp + 3) = (png_byte)(background->green & 0xff);
 | 
				
			||||||
                        *(dp + 4) = (background->blue >> 8) & 0xff;
 | 
													*(dp + 4) = (png_byte)((background->blue >> 8) & 0xff);
 | 
				
			||||||
                        *(dp + 5) = background->blue & 0xff;
 | 
													*(dp + 5) = (png_byte)(background->blue & 0xff);
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                     else
 | 
					                     else
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
@ -1958,20 +1960,20 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
                  {
 | 
					                  {
 | 
				
			||||||
                     png_uint_16 a;
 | 
					                     png_uint_16 a;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                     a = ((png_uint_16)(*(sp + 6)) << 8) +
 | 
												a = (png_uint_16)(((png_uint_16)(*(sp + 6)) << 8) +
 | 
				
			||||||
                        (png_uint_16)(*(sp + 7));
 | 
													(png_uint_16)(*(sp + 7)));
 | 
				
			||||||
                     if (a == (png_uint_16)0xffff)
 | 
					                     if (a == (png_uint_16)0xffff)
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        png_memcpy(dp, sp, 6);
 | 
					                        png_memcpy(dp, sp, 6);
 | 
				
			||||||
                     }
 | 
					                     }
 | 
				
			||||||
                     else if (a == 0)
 | 
					                     else if (a == 0)
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
                        *dp = (background->red >> 8) & 0xff;
 | 
													*dp = (png_byte)((background->red >> 8) & 0xff);
 | 
				
			||||||
                        *(dp + 1) = background->red & 0xff;
 | 
													*(dp + 1) = (png_byte)(background->red & 0xff);
 | 
				
			||||||
                        *(dp + 2) = (background->green >> 8) & 0xff;
 | 
													*(dp + 2) = (png_byte)((background->green >> 8) & 0xff);
 | 
				
			||||||
                        *(dp + 3) = background->green & 0xff;
 | 
													*(dp + 3) = (png_byte)(background->green & 0xff);
 | 
				
			||||||
                        *(dp + 4) = (background->blue >> 8) & 0xff;
 | 
													*(dp + 4) = (png_byte)((background->blue >> 8) & 0xff);
 | 
				
			||||||
                        *(dp + 5) = background->blue & 0xff;
 | 
													*(dp + 5) = (png_byte)(background->blue & 0xff);
 | 
				
			||||||
							}
 | 
												}
 | 
				
			||||||
							else
 | 
												else
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
@ -2011,9 +2013,9 @@ png_do_background(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
      if (row_info->color_type & PNG_COLOR_MASK_ALPHA)
 | 
					      if (row_info->color_type & PNG_COLOR_MASK_ALPHA)
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
         row_info->color_type &= ~PNG_COLOR_MASK_ALPHA;
 | 
					         row_info->color_type &= ~PNG_COLOR_MASK_ALPHA;
 | 
				
			||||||
         row_info->channels -= 1;
 | 
								row_info->channels -= (png_byte)1;
 | 
				
			||||||
         row_info->pixel_depth = row_info->channels *
 | 
								row_info->pixel_depth = (png_byte)(row_info->channels *
 | 
				
			||||||
            row_info->bit_depth;
 | 
									row_info->bit_depth);
 | 
				
			||||||
         row_info->rowbytes = ((row_info->width *
 | 
					         row_info->rowbytes = ((row_info->width *
 | 
				
			||||||
            row_info->pixel_depth + 7) >> 3);
 | 
					            row_info->pixel_depth + 7) >> 3);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -2065,18 +2067,18 @@ png_do_gamma(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                  v = gamma_16_table[*(sp + 1) >>
 | 
					                  v = gamma_16_table[*(sp + 1) >>
 | 
				
			||||||
                     gamma_shift][*sp];
 | 
					                     gamma_shift][*sp];
 | 
				
			||||||
                  *sp = (v >> 8) & 0xff;
 | 
											*sp = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                  *(sp + 1) = v & 0xff;
 | 
											*(sp + 1) = (png_byte)(v & 0xff);
 | 
				
			||||||
						sp += 2;
 | 
											sp += 2;
 | 
				
			||||||
						v = gamma_16_table[*(sp + 1) >>
 | 
											v = gamma_16_table[*(sp + 1) >>
 | 
				
			||||||
							gamma_shift][*sp];
 | 
												gamma_shift][*sp];
 | 
				
			||||||
                  *sp = (v >> 8) & 0xff;
 | 
											*sp = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                  *(sp + 1) = v & 0xff;
 | 
											*(sp + 1) = (png_byte)(v & 0xff);
 | 
				
			||||||
                  sp += 2;
 | 
					                  sp += 2;
 | 
				
			||||||
                  v = gamma_16_table[*(sp + 1) >>
 | 
					                  v = gamma_16_table[*(sp + 1) >>
 | 
				
			||||||
                     gamma_shift][*sp];
 | 
					                     gamma_shift][*sp];
 | 
				
			||||||
                  *sp = (v >> 8) & 0xff;
 | 
											*sp = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                  *(sp + 1) = v & 0xff;
 | 
											*(sp + 1) = (png_byte)(v & 0xff);
 | 
				
			||||||
						sp += 2;
 | 
											sp += 2;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@ -2107,18 +2109,18 @@ png_do_gamma(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                  v = gamma_16_table[*(sp + 1) >>
 | 
					                  v = gamma_16_table[*(sp + 1) >>
 | 
				
			||||||
                     gamma_shift][*sp];
 | 
					                     gamma_shift][*sp];
 | 
				
			||||||
                  *sp = (v >> 8) & 0xff;
 | 
											*sp = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                  *(sp + 1) = v & 0xff;
 | 
											*(sp + 1) = (png_byte)(v & 0xff);
 | 
				
			||||||
                  sp += 2;
 | 
					                  sp += 2;
 | 
				
			||||||
                  v = gamma_16_table[*(sp + 1) >>
 | 
					                  v = gamma_16_table[*(sp + 1) >>
 | 
				
			||||||
                     gamma_shift][*sp];
 | 
					                     gamma_shift][*sp];
 | 
				
			||||||
                  *sp = (v >> 8) & 0xff;
 | 
											*sp = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                  *(sp + 1) = v & 0xff;
 | 
											*(sp + 1) = (png_byte)(v & 0xff);
 | 
				
			||||||
						sp += 2;
 | 
											sp += 2;
 | 
				
			||||||
						v = gamma_16_table[*(sp + 1) >>
 | 
											v = gamma_16_table[*(sp + 1) >>
 | 
				
			||||||
							gamma_shift][*sp];
 | 
												gamma_shift][*sp];
 | 
				
			||||||
                  *sp = (v >> 8) & 0xff;
 | 
											*sp = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                  *(sp + 1) = v & 0xff;
 | 
											*(sp + 1) = (png_byte)(v & 0xff);
 | 
				
			||||||
						sp += 4;
 | 
											sp += 4;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@ -2145,8 +2147,8 @@ png_do_gamma(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                  v = gamma_16_table[*(sp + 1) >>
 | 
					                  v = gamma_16_table[*(sp + 1) >>
 | 
				
			||||||
                     gamma_shift][*sp];
 | 
					                     gamma_shift][*sp];
 | 
				
			||||||
                  *sp = (v >> 8) & 0xff;
 | 
											*sp = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                  *(sp + 1) = v & 0xff;
 | 
											*(sp + 1) = (png_byte)(v & 0xff);
 | 
				
			||||||
                  sp += 4;
 | 
					                  sp += 4;
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -2172,8 +2174,8 @@ png_do_gamma(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                  v = gamma_16_table[*(sp + 1) >>
 | 
					                  v = gamma_16_table[*(sp + 1) >>
 | 
				
			||||||
                     gamma_shift][*sp];
 | 
					                     gamma_shift][*sp];
 | 
				
			||||||
                  *sp = (v >> 8) & 0xff;
 | 
											*sp = (png_byte)((v >> 8) & 0xff);
 | 
				
			||||||
                  *(sp + 1) = v & 0xff;
 | 
											*(sp + 1) = (png_byte)(v & 0xff);
 | 
				
			||||||
                  sp += 2;
 | 
					                  sp += 2;
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -2233,7 +2235,7 @@ png_do_expand_palette(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
               for (i = 0; i < row_info->width; i++)
 | 
					               for (i = 0; i < row_info->width; i++)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  value = (*sp >> shift) & 0x3;
 | 
					                  value = (*sp >> shift) & 0x3;
 | 
				
			||||||
                  *dp = value;
 | 
											*dp = (png_byte)value;
 | 
				
			||||||
                  if (shift == 6)
 | 
					                  if (shift == 6)
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
                     shift = 0;
 | 
					                     shift = 0;
 | 
				
			||||||
@ -2254,7 +2256,7 @@ png_do_expand_palette(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
               for (i = 0; i < row_info->width; i++)
 | 
					               for (i = 0; i < row_info->width; i++)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  value = (*sp >> shift) & 0xf;
 | 
					                  value = (*sp >> shift) & 0xf;
 | 
				
			||||||
                  *dp = value;
 | 
											*dp = (png_byte)value;
 | 
				
			||||||
                  if (shift == 4)
 | 
					                  if (shift == 4)
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
                     shift = 0;
 | 
					                     shift = 0;
 | 
				
			||||||
@ -2370,7 +2372,7 @@ png_do_expand(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
               for (i = 0; i < row_info->width; i++)
 | 
					               for (i = 0; i < row_info->width; i++)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  value = (*sp >> shift) & 0x3;
 | 
					                  value = (*sp >> shift) & 0x3;
 | 
				
			||||||
                  *dp = (value | (value << 2) | (value << 4) |
 | 
											*dp = (png_byte)(value | (value << 2) | (value << 4) |
 | 
				
			||||||
							(value << 6));
 | 
												(value << 6));
 | 
				
			||||||
                  if (shift == 6)
 | 
					                  if (shift == 6)
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
@ -2392,7 +2394,7 @@ png_do_expand(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
               for (i = 0; i < row_info->width; i++)
 | 
					               for (i = 0; i < row_info->width; i++)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  value = (*sp >> shift) & 0xf;
 | 
					                  value = (*sp >> shift) & 0xf;
 | 
				
			||||||
                  *dp = (value | (value << 4));
 | 
											*dp = (png_byte)(value | (value << 4));
 | 
				
			||||||
                  if (shift == 4)
 | 
					                  if (shift == 4)
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
                     shift = 0;
 | 
					                     shift = 0;
 | 
				
			||||||
@ -2448,7 +2450,7 @@ png_do_expand(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
         }
 | 
					         }
 | 
				
			||||||
         row_info->color_type = PNG_COLOR_TYPE_GRAY_ALPHA;
 | 
					         row_info->color_type = PNG_COLOR_TYPE_GRAY_ALPHA;
 | 
				
			||||||
         row_info->channels = 2;
 | 
					         row_info->channels = 2;
 | 
				
			||||||
         row_info->pixel_depth = (row_info->bit_depth << 1);
 | 
								row_info->pixel_depth = (png_byte)(row_info->bit_depth << 1);
 | 
				
			||||||
         row_info->rowbytes =
 | 
					         row_info->rowbytes =
 | 
				
			||||||
            ((row_info->width * row_info->pixel_depth) >> 3);
 | 
					            ((row_info->width * row_info->pixel_depth) >> 3);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -2502,7 +2504,7 @@ png_do_expand(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
         }
 | 
					         }
 | 
				
			||||||
         row_info->color_type = PNG_COLOR_TYPE_RGB_ALPHA;
 | 
					         row_info->color_type = PNG_COLOR_TYPE_RGB_ALPHA;
 | 
				
			||||||
         row_info->channels = 4;
 | 
					         row_info->channels = 4;
 | 
				
			||||||
         row_info->pixel_depth = (row_info->bit_depth << 2);
 | 
								row_info->pixel_depth = (png_byte)(row_info->bit_depth << 2);
 | 
				
			||||||
         row_info->rowbytes =
 | 
					         row_info->rowbytes =
 | 
				
			||||||
            ((row_info->width * row_info->pixel_depth) >> 3);
 | 
					            ((row_info->width * row_info->pixel_depth) >> 3);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -2613,7 +2615,7 @@ png_build_gamma_table(png_structp png_ptr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      g = 1.0 / (png_ptr->gamma * png_ptr->display_gamma);
 | 
					      g = 1.0 / (png_ptr->gamma * png_ptr->display_gamma);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      png_ptr->gamma_table = (png_bytep)png_malloc(png_ptr,
 | 
					      png_ptr->gamma_table = (png_bytep)png_large_malloc(png_ptr,
 | 
				
			||||||
         (png_uint_32)256);
 | 
					         (png_uint_32)256);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      for (i = 0; i < 256; i++)
 | 
					      for (i = 0; i < 256; i++)
 | 
				
			||||||
@ -2626,7 +2628,7 @@ png_build_gamma_table(png_structp png_ptr)
 | 
				
			|||||||
      {
 | 
					      {
 | 
				
			||||||
         g = 1.0 / (png_ptr->gamma);
 | 
					         g = 1.0 / (png_ptr->gamma);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         png_ptr->gamma_to_1 = (png_bytep)png_malloc(png_ptr,
 | 
					         png_ptr->gamma_to_1 = (png_bytep)png_large_malloc(png_ptr,
 | 
				
			||||||
            (png_uint_32)256);
 | 
					            (png_uint_32)256);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         for (i = 0; i < 256; i++)
 | 
					         for (i = 0; i < 256; i++)
 | 
				
			||||||
@ -2637,7 +2639,7 @@ png_build_gamma_table(png_structp png_ptr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
         g = 1.0 / (png_ptr->display_gamma);
 | 
					         g = 1.0 / (png_ptr->display_gamma);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			png_ptr->gamma_from_1 = (png_bytep)png_malloc(png_ptr,
 | 
								png_ptr->gamma_from_1 = (png_bytep)png_large_malloc(png_ptr,
 | 
				
			||||||
            (png_uint_32)256);
 | 
					            (png_uint_32)256);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         for (i = 0; i < 256; i++)
 | 
					         for (i = 0; i < 256; i++)
 | 
				
			||||||
@ -2683,13 +2685,13 @@ png_build_gamma_table(png_structp png_ptr)
 | 
				
			|||||||
      if (shift < 0)
 | 
					      if (shift < 0)
 | 
				
			||||||
         shift = 0;
 | 
					         shift = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		png_ptr->gamma_shift = shift;
 | 
							png_ptr->gamma_shift = (png_byte)shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		num = (1 << (8 - shift));
 | 
							num = (1 << (8 - shift));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      g = 1.0 / (png_ptr->gamma * png_ptr->display_gamma);
 | 
					      g = 1.0 / (png_ptr->gamma * png_ptr->display_gamma);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      png_ptr->gamma_16_table = (png_uint_16pp)png_malloc(png_ptr,
 | 
					      png_ptr->gamma_16_table = (png_uint_16pp)png_large_malloc(png_ptr,
 | 
				
			||||||
         num * sizeof (png_uint_16p ));
 | 
					         num * sizeof (png_uint_16p ));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ((png_ptr->transformations & PNG_16_TO_8) &&
 | 
							if ((png_ptr->transformations & PNG_16_TO_8) &&
 | 
				
			||||||
@ -2700,7 +2702,7 @@ png_build_gamma_table(png_structp png_ptr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			for (i = 0; i < num; i++)
 | 
								for (i = 0; i < num; i++)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
 | 
									png_ptr->gamma_16_table[i] = (png_uint_16p)png_large_malloc(png_ptr,
 | 
				
			||||||
					256 * sizeof (png_uint_16));
 | 
										256 * sizeof (png_uint_16));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2714,8 +2716,8 @@ png_build_gamma_table(png_structp png_ptr)
 | 
				
			|||||||
				while (last <= max)
 | 
									while (last <= max)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					png_ptr->gamma_16_table[(int)(last & (0xff >> shift))]
 | 
										png_ptr->gamma_16_table[(int)(last & (0xff >> shift))]
 | 
				
			||||||
						[(int)(last >> (8 - shift))] =
 | 
											[(int)(last >> (8 - shift))] = (png_uint_16)(
 | 
				
			||||||
						(png_uint_16)i | ((png_uint_16)i << 8);
 | 
											(png_uint_16)i | ((png_uint_16)i << 8));
 | 
				
			||||||
					last++;
 | 
										last++;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -2731,7 +2733,7 @@ png_build_gamma_table(png_structp png_ptr)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			for (i = 0; i < num; i++)
 | 
								for (i = 0; i < num; i++)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
 | 
									png_ptr->gamma_16_table[i] = (png_uint_16p)png_large_malloc(png_ptr,
 | 
				
			||||||
					256 * sizeof (png_uint_16));
 | 
										256 * sizeof (png_uint_16));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				ig = (((png_uint_32)i *
 | 
									ig = (((png_uint_32)i *
 | 
				
			||||||
@ -2749,12 +2751,12 @@ png_build_gamma_table(png_structp png_ptr)
 | 
				
			|||||||
      {
 | 
					      {
 | 
				
			||||||
         g = 1.0 / (png_ptr->gamma);
 | 
					         g = 1.0 / (png_ptr->gamma);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			png_ptr->gamma_16_to_1 = (png_uint_16pp)png_malloc(png_ptr,
 | 
								png_ptr->gamma_16_to_1 = (png_uint_16pp)png_large_malloc(png_ptr,
 | 
				
			||||||
            num * sizeof (png_uint_16p ));
 | 
					            num * sizeof (png_uint_16p ));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         for (i = 0; i < num; i++)
 | 
					         for (i = 0; i < num; i++)
 | 
				
			||||||
         {
 | 
					         {
 | 
				
			||||||
            png_ptr->gamma_16_to_1[i] = (png_uint_16p)png_malloc(png_ptr,
 | 
					            png_ptr->gamma_16_to_1[i] = (png_uint_16p)png_large_malloc(png_ptr,
 | 
				
			||||||
               256 * sizeof (png_uint_16));
 | 
					               256 * sizeof (png_uint_16));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ig = (((png_uint_32)i *
 | 
					            ig = (((png_uint_32)i *
 | 
				
			||||||
@ -2768,12 +2770,12 @@ png_build_gamma_table(png_structp png_ptr)
 | 
				
			|||||||
         }
 | 
					         }
 | 
				
			||||||
         g = 1.0 / (png_ptr->display_gamma);
 | 
					         g = 1.0 / (png_ptr->display_gamma);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         png_ptr->gamma_16_from_1 = (png_uint_16pp)png_malloc(png_ptr,
 | 
					         png_ptr->gamma_16_from_1 = (png_uint_16pp)png_large_malloc(png_ptr,
 | 
				
			||||||
            num * sizeof (png_uint_16p));
 | 
					            num * sizeof (png_uint_16p));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         for (i = 0; i < num; i++)
 | 
					         for (i = 0; i < num; i++)
 | 
				
			||||||
         {
 | 
					         {
 | 
				
			||||||
				png_ptr->gamma_16_from_1[i] = (png_uint_16p)png_malloc(png_ptr,
 | 
									png_ptr->gamma_16_from_1[i] = (png_uint_16p)png_large_malloc(png_ptr,
 | 
				
			||||||
               256 * sizeof (png_uint_16));
 | 
					               256 * sizeof (png_uint_16));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ig = (((png_uint_32)i *
 | 
					            ig = (((png_uint_32)i *
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										50
									
								
								pngrutil.c
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								pngrutil.c
									
									
									
									
									
								
							@ -1,10 +1,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* pngrutil.c - utilities to read a png file
 | 
					/* pngrutil.c - utilities to 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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PNG_INTERNAL
 | 
					#define PNG_INTERNAL
 | 
				
			||||||
@ -30,8 +30,8 @@ png_get_uint_16(png_bytep buf)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
   png_uint_16 i;
 | 
					   png_uint_16 i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	i = ((png_uint_16)(*buf) << 8) +
 | 
						i = (png_uint_16)(((png_uint_16)(*buf) << 8) +
 | 
				
			||||||
      (png_uint_16)(*(buf + 1));
 | 
							(png_uint_16)(*(buf + 1)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   return i;
 | 
					   return i;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -121,9 +121,9 @@ png_handle_IHDR(png_structp png_ptr, png_infop info, png_uint_32 length)
 | 
				
			|||||||
   /* set internal variables */
 | 
					   /* set internal variables */
 | 
				
			||||||
   png_ptr->width = width;
 | 
					   png_ptr->width = width;
 | 
				
			||||||
   png_ptr->height = height;
 | 
					   png_ptr->height = height;
 | 
				
			||||||
   png_ptr->bit_depth = bit_depth;
 | 
						png_ptr->bit_depth = (png_byte)bit_depth;
 | 
				
			||||||
   png_ptr->interlaced = interlace_type;
 | 
						png_ptr->interlaced = (png_byte)interlace_type;
 | 
				
			||||||
   png_ptr->color_type = color_type;
 | 
						png_ptr->color_type = (png_byte)color_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   /* find number of channels */
 | 
					   /* find number of channels */
 | 
				
			||||||
   switch (png_ptr->color_type)
 | 
					   switch (png_ptr->color_type)
 | 
				
			||||||
@ -143,8 +143,8 @@ png_handle_IHDR(png_structp png_ptr, png_infop info, png_uint_32 length)
 | 
				
			|||||||
         break;
 | 
					         break;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   /* set up other useful info */
 | 
					   /* set up other useful info */
 | 
				
			||||||
   png_ptr->pixel_depth = png_ptr->bit_depth *
 | 
						png_ptr->pixel_depth = (png_byte)(png_ptr->bit_depth *
 | 
				
			||||||
      png_ptr->channels;
 | 
							png_ptr->channels);
 | 
				
			||||||
   png_ptr->rowbytes = ((png_ptr->width *
 | 
					   png_ptr->rowbytes = ((png_ptr->width *
 | 
				
			||||||
      (png_uint_32)png_ptr->pixel_depth + 7) >> 3);
 | 
					      (png_uint_32)png_ptr->pixel_depth + 7) >> 3);
 | 
				
			||||||
   /* call the IHDR callback (which should just set up info) */
 | 
					   /* call the IHDR callback (which should just set up info) */
 | 
				
			||||||
@ -163,7 +163,7 @@ png_handle_PLTE(png_structp png_ptr, png_infop info, png_uint_32 length)
 | 
				
			|||||||
      png_error(png_ptr, "Invalid Palette Chunk");
 | 
					      png_error(png_ptr, "Invalid Palette Chunk");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   num = (int)length / 3;
 | 
					   num = (int)length / 3;
 | 
				
			||||||
   palette = (png_colorp)png_malloc(png_ptr, num * sizeof (png_color));
 | 
					   palette = (png_colorp)png_large_malloc(png_ptr, num * sizeof (png_color));
 | 
				
			||||||
   png_ptr->do_free |= PNG_FREE_PALETTE;
 | 
					   png_ptr->do_free |= PNG_FREE_PALETTE;
 | 
				
			||||||
	for (i = 0; i < num; i++)
 | 
						for (i = 0; i < num; i++)
 | 
				
			||||||
   {
 | 
					   {
 | 
				
			||||||
@ -176,7 +176,7 @@ png_handle_PLTE(png_structp png_ptr, png_infop info, png_uint_32 length)
 | 
				
			|||||||
      palette[i].blue = buf[2];
 | 
					      palette[i].blue = buf[2];
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   png_ptr->palette = palette;
 | 
					   png_ptr->palette = palette;
 | 
				
			||||||
   png_ptr->num_palette = num;
 | 
						png_ptr->num_palette = (png_uint_16)num;
 | 
				
			||||||
   png_read_PLTE(png_ptr, info, palette, num);
 | 
					   png_read_PLTE(png_ptr, info, palette, num);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -310,10 +310,10 @@ png_handle_tRNS(png_structp png_ptr, png_infop info, png_uint_32 length)
 | 
				
			|||||||
         return;
 | 
					         return;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      png_ptr->trans = (png_bytep)png_malloc(png_ptr, length);
 | 
					      png_ptr->trans = (png_bytep)png_large_malloc(png_ptr, length);
 | 
				
			||||||
      png_ptr->do_free |= PNG_FREE_TRANS;
 | 
					      png_ptr->do_free |= PNG_FREE_TRANS;
 | 
				
			||||||
		png_crc_read(png_ptr, png_ptr->trans, length);
 | 
							png_crc_read(png_ptr, png_ptr->trans, length);
 | 
				
			||||||
		png_ptr->num_trans = (int)length;
 | 
							png_ptr->num_trans = (png_uint_16)length;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
 | 
					   else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
 | 
				
			||||||
   {
 | 
					   {
 | 
				
			||||||
@ -406,7 +406,7 @@ png_handle_hIST(png_structp png_ptr, png_infop info, png_uint_32 length)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   num = (int)length / 2;
 | 
					   num = (int)length / 2;
 | 
				
			||||||
	png_ptr->hist = (png_uint_16p)png_malloc(png_ptr,
 | 
						png_ptr->hist = (png_uint_16p)png_large_malloc(png_ptr,
 | 
				
			||||||
		num * sizeof (png_uint_16));
 | 
							num * sizeof (png_uint_16));
 | 
				
			||||||
   png_ptr->do_free |= PNG_FREE_HIST;
 | 
					   png_ptr->do_free |= PNG_FREE_HIST;
 | 
				
			||||||
	for (i = 0; i < num; i++)
 | 
						for (i = 0; i < num; i++)
 | 
				
			||||||
@ -503,8 +503,6 @@ png_handle_tEXt(png_structp png_ptr, png_infop info, png_uint_32 length)
 | 
				
			|||||||
	png_charp key;
 | 
						png_charp key;
 | 
				
			||||||
   png_charp text;
 | 
					   png_charp text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   text = NULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	key = (png_charp )png_large_malloc(png_ptr, length + 1);
 | 
						key = (png_charp )png_large_malloc(png_ptr, length + 1);
 | 
				
			||||||
   png_crc_read(png_ptr, (png_bytep )key, length);
 | 
					   png_crc_read(png_ptr, (png_bytep )key, length);
 | 
				
			||||||
	key[(png_size_t)length] = '\0';
 | 
						key[(png_size_t)length] = '\0';
 | 
				
			||||||
@ -529,8 +527,6 @@ png_handle_zTXt(png_structp png_ptr, png_infop info, png_uint_32 length)
 | 
				
			|||||||
   int ret;
 | 
					   int ret;
 | 
				
			||||||
   png_uint_32 text_size, key_size;
 | 
					   png_uint_32 text_size, key_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   text = NULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	key = png_large_malloc(png_ptr, length + 1);
 | 
						key = png_large_malloc(png_ptr, length + 1);
 | 
				
			||||||
	png_crc_read(png_ptr, (png_bytep )key, length);
 | 
						png_crc_read(png_ptr, (png_bytep )key, length);
 | 
				
			||||||
   key[(png_size_t)length] = '\0';
 | 
					   key[(png_size_t)length] = '\0';
 | 
				
			||||||
@ -585,7 +581,7 @@ png_handle_zTXt(png_structp png_ptr, png_infop info, png_uint_32 length)
 | 
				
			|||||||
      {
 | 
					      {
 | 
				
			||||||
         if (!text)
 | 
					         if (!text)
 | 
				
			||||||
         {
 | 
					         {
 | 
				
			||||||
            text = (png_charp)png_malloc(png_ptr,
 | 
					            text = (png_charp)png_large_malloc(png_ptr,
 | 
				
			||||||
               png_ptr->zbuf_size - png_ptr->zstream->avail_out +
 | 
					               png_ptr->zbuf_size - png_ptr->zstream->avail_out +
 | 
				
			||||||
                  key_size + 1);
 | 
					                  key_size + 1);
 | 
				
			||||||
            png_memcpy(text + (png_size_t)key_size, png_ptr->zbuf,
 | 
					            png_memcpy(text + (png_size_t)key_size, png_ptr->zbuf,
 | 
				
			||||||
@ -687,7 +683,7 @@ png_combine_row(png_structp png_ptr, png_bytep row,
 | 
				
			|||||||
               {
 | 
					               {
 | 
				
			||||||
                  value = (*sp >> shift) & 0x1;
 | 
					                  value = (*sp >> shift) & 0x1;
 | 
				
			||||||
                  *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);
 | 
					                  *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);
 | 
				
			||||||
                  *dp |= (value << shift);
 | 
											*dp |= (png_byte)(value << shift);
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
               if (shift == 0)
 | 
					               if (shift == 0)
 | 
				
			||||||
@ -725,7 +721,7 @@ png_combine_row(png_structp png_ptr, png_bytep row,
 | 
				
			|||||||
               {
 | 
					               {
 | 
				
			||||||
                  value = (*sp >> shift) & 0x3;
 | 
					                  value = (*sp >> shift) & 0x3;
 | 
				
			||||||
                  *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
 | 
					                  *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
 | 
				
			||||||
                  *dp |= (value << shift);
 | 
											*dp |= (png_byte)(value << shift);
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
               if (shift == 0)
 | 
					               if (shift == 0)
 | 
				
			||||||
@ -762,7 +758,7 @@ png_combine_row(png_structp png_ptr, png_bytep row,
 | 
				
			|||||||
               {
 | 
					               {
 | 
				
			||||||
                  value = (*sp >> shift) & 0xf;
 | 
					                  value = (*sp >> shift) & 0xf;
 | 
				
			||||||
                  *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
 | 
					                  *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
 | 
				
			||||||
                  *dp |= (value << shift);
 | 
											*dp |= (png_byte)(value << shift);
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
               if (shift == 0)
 | 
					               if (shift == 0)
 | 
				
			||||||
@ -839,7 +835,7 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass)
 | 
				
			|||||||
            dshift = 7 - (int)((final_width + 7) & 7);
 | 
					            dshift = 7 - (int)((final_width + 7) & 7);
 | 
				
			||||||
            for (i = row_info->width; i; i--)
 | 
					            for (i = row_info->width; i; i--)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
               v = (*sp >> sshift) & 0x1;
 | 
										v = (png_byte)((*sp >> sshift) & 0x1);
 | 
				
			||||||
               for (j = 0; j < png_pass_inc[pass]; j++)
 | 
					               for (j = 0; j < png_pass_inc[pass]; j++)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  *dp &= (png_byte)((0x7f7f >> (7 - dshift)) & 0xff);
 | 
					                  *dp &= (png_byte)((0x7f7f >> (7 - dshift)) & 0xff);
 | 
				
			||||||
@ -875,11 +871,11 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass)
 | 
				
			|||||||
            dshift = (png_size_t)((3 - ((final_width + 3) & 3)) << 1);
 | 
					            dshift = (png_size_t)((3 - ((final_width + 3) & 3)) << 1);
 | 
				
			||||||
            for (i = row_info->width; i; i--)
 | 
					            for (i = row_info->width; i; i--)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
               v = (*sp >> sshift) & 0x3;
 | 
										v = (png_byte)((*sp >> sshift) & 0x3);
 | 
				
			||||||
               for (j = 0; j < png_pass_inc[pass]; j++)
 | 
					               for (j = 0; j < png_pass_inc[pass]; j++)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  *dp &= (png_byte)((0x3f3f >> (6 - dshift)) & 0xff);
 | 
					                  *dp &= (png_byte)((0x3f3f >> (6 - dshift)) & 0xff);
 | 
				
			||||||
                  *dp |= (v << dshift);
 | 
											*dp |= (png_byte)(v << dshift);
 | 
				
			||||||
                  if (dshift == 6)
 | 
					                  if (dshift == 6)
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
                     dshift = 0;
 | 
					                     dshift = 0;
 | 
				
			||||||
@ -912,11 +908,11 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass)
 | 
				
			|||||||
            dshift = (png_size_t)((1 - ((final_width + 1) & 1)) << 2);
 | 
					            dshift = (png_size_t)((1 - ((final_width + 1) & 1)) << 2);
 | 
				
			||||||
            for (i = row_info->width; i; i--)
 | 
					            for (i = row_info->width; i; i--)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
               v = (*sp >> sshift) & 0xf;
 | 
										v = (png_byte)((*sp >> sshift) & 0xf);
 | 
				
			||||||
               for (j = 0; j < png_pass_inc[pass]; j++)
 | 
					               for (j = 0; j < png_pass_inc[pass]; j++)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  *dp &= (png_byte)((0xf0f >> (4 - dshift)) & 0xff);
 | 
					                  *dp &= (png_byte)((0xf0f >> (4 - dshift)) & 0xff);
 | 
				
			||||||
                  *dp |= (v << dshift);
 | 
					                  *dp |= (png_byte)(v << dshift);
 | 
				
			||||||
                  if (dshift == 4)
 | 
					                  if (dshift == 4)
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
                     dshift = 0;
 | 
					                     dshift = 0;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										22
									
								
								pngtest.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								pngtest.c
									
									
									
									
									
								
							@ -1,10 +1,10 @@
 | 
				
			|||||||
/* pngtest.c - a simple test program to test libpng
 | 
					/* pngtest.c - a simple test program to test libpng
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
   */
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
@ -33,11 +33,13 @@ int main()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
   FILE *fpin, *fpout;
 | 
					   FILE *fpin, *fpout;
 | 
				
			||||||
	png_bytep row_buf;
 | 
						png_bytep row_buf;
 | 
				
			||||||
 | 
					   png_byte * near_row_buf;
 | 
				
			||||||
   png_uint_32 rowbytes;
 | 
					   png_uint_32 rowbytes;
 | 
				
			||||||
   png_uint_32 y;
 | 
					   png_uint_32 y;
 | 
				
			||||||
   int channels, num_pass, pass;
 | 
					   int channels, num_pass, pass;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   row_buf = (png_bytep )0;
 | 
						row_buf = (png_bytep)0;
 | 
				
			||||||
 | 
					   near_row_buf = (png_byte *)0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   fprintf(STDERR, "Testing libpng version %s\n", PNG_LIBPNG_VER_STRING);
 | 
					   fprintf(STDERR, "Testing libpng version %s\n", PNG_LIBPNG_VER_STRING);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -99,7 +101,8 @@ int main()
 | 
				
			|||||||
      channels++;
 | 
					      channels++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   rowbytes = ((info_ptr.width * info_ptr.bit_depth * channels + 7) >> 3);
 | 
					   rowbytes = ((info_ptr.width * info_ptr.bit_depth * channels + 7) >> 3);
 | 
				
			||||||
   row_buf = (png_bytep )malloc((size_t)rowbytes);
 | 
						near_row_buf = (png_byte *)malloc((size_t)rowbytes);
 | 
				
			||||||
 | 
					   row_buf = (png_bytep)near_row_buf;
 | 
				
			||||||
   if (!row_buf)
 | 
					   if (!row_buf)
 | 
				
			||||||
   {
 | 
					   {
 | 
				
			||||||
      fprintf(STDERR, "no memory to allocate row buffer\n");
 | 
					      fprintf(STDERR, "no memory to allocate row buffer\n");
 | 
				
			||||||
@ -124,8 +127,11 @@ int main()
 | 
				
			|||||||
   {
 | 
					   {
 | 
				
			||||||
      for (y = 0; y < info_ptr.height; y++)
 | 
					      for (y = 0; y < info_ptr.height; y++)
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
         png_read_rows(&read_ptr, (png_bytepp )&row_buf, (png_bytepp )0, 1);
 | 
					#ifdef TESTING
 | 
				
			||||||
         png_write_rows(&write_ptr, (png_bytepp )&row_buf, 1);
 | 
					         fprintf(STDERR, "Processing line #%ld\n", y);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
								png_read_rows(&read_ptr, (png_bytepp)&row_buf, (png_bytepp)0, 1);
 | 
				
			||||||
 | 
								png_write_rows(&write_ptr, (png_bytepp)&row_buf, 1);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -138,7 +144,7 @@ int main()
 | 
				
			|||||||
   fclose(fpin);
 | 
					   fclose(fpin);
 | 
				
			||||||
   fclose(fpout);
 | 
					   fclose(fpout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   free((void *)row_buf);
 | 
					   free((void *)near_row_buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   fpin = fopen(inname, "rb");
 | 
					   fpin = fopen(inname, "rb");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ for 0.9
 | 
				
			|||||||
   improved dithering
 | 
					   improved dithering
 | 
				
			||||||
   final bug fixes
 | 
					   final bug fixes
 | 
				
			||||||
	cHRM transformation
 | 
						cHRM transformation
 | 
				
			||||||
 | 
					   better documentation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
after 1.0
 | 
					after 1.0
 | 
				
			||||||
   overlaying one image on top of another
 | 
					   overlaying one image on top of another
 | 
				
			||||||
 | 
				
			|||||||
@ -2,10 +2,10 @@
 | 
				
			|||||||
/* pngtrans.c - transforms the data in a row
 | 
					/* pngtrans.c - transforms the data in a row
 | 
				
			||||||
   routines used by both readers and writers
 | 
					   routines used by both readers and writers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PNG_INTERNAL
 | 
					#define PNG_INTERNAL
 | 
				
			||||||
@ -113,7 +113,7 @@ png_do_invert(png_row_infop row_info, png_bytep row)
 | 
				
			|||||||
         i < row_info->rowbytes;
 | 
					         i < row_info->rowbytes;
 | 
				
			||||||
         i++, rp++)
 | 
					         i++, rp++)
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
         *rp = ~(*rp);
 | 
					         *rp = (png_byte)(~(*rp));
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										26
									
								
								pngwrite.c
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								pngwrite.c
									
									
									
									
									
								
							@ -1,10 +1,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* pngwrite.c - general routines to write a png file
 | 
					/* pngwrite.c - general routines to write 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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* get internal access to png.h */
 | 
					/* get internal access to png.h */
 | 
				
			||||||
@ -161,12 +161,12 @@ png_write_end(png_structp png_ptr, png_infop info)
 | 
				
			|||||||
void
 | 
					void
 | 
				
			||||||
png_convert_from_struct_tm(png_timep ptime, struct tm FAR * ttime)
 | 
					png_convert_from_struct_tm(png_timep ptime, struct tm FAR * ttime)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ptime->year = 1900 + ttime->tm_year;
 | 
						ptime->year = (png_uint_16)(1900 + ttime->tm_year);
 | 
				
			||||||
	ptime->month = ttime->tm_mon + 1;
 | 
						ptime->month = (png_byte)(ttime->tm_mon + 1);
 | 
				
			||||||
	ptime->day = ttime->tm_mday;
 | 
						ptime->day = (png_byte)ttime->tm_mday;
 | 
				
			||||||
	ptime->hour = ttime->tm_hour;
 | 
						ptime->hour = (png_byte)ttime->tm_hour;
 | 
				
			||||||
	ptime->minute = ttime->tm_min;
 | 
						ptime->minute = (png_byte)ttime->tm_min;
 | 
				
			||||||
	ptime->second = ttime->tm_sec;
 | 
						ptime->second = (png_byte)ttime->tm_sec;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@ -322,8 +322,8 @@ png_write_row(png_structp png_ptr, png_bytep row)
 | 
				
			|||||||
   png_ptr->row_info.width = png_ptr->usr_width;
 | 
					   png_ptr->row_info.width = png_ptr->usr_width;
 | 
				
			||||||
   png_ptr->row_info.channels = png_ptr->usr_channels;
 | 
					   png_ptr->row_info.channels = png_ptr->usr_channels;
 | 
				
			||||||
   png_ptr->row_info.bit_depth = png_ptr->usr_bit_depth;
 | 
					   png_ptr->row_info.bit_depth = png_ptr->usr_bit_depth;
 | 
				
			||||||
   png_ptr->row_info.pixel_depth = png_ptr->row_info.bit_depth *
 | 
						png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth *
 | 
				
			||||||
      png_ptr->row_info.channels;
 | 
							png_ptr->row_info.channels);
 | 
				
			||||||
   png_ptr->row_info.rowbytes = ((png_ptr->row_info.width *
 | 
					   png_ptr->row_info.rowbytes = ((png_ptr->row_info.width *
 | 
				
			||||||
      (png_uint_32)png_ptr->row_info.pixel_depth + 7) >> 3);
 | 
					      (png_uint_32)png_ptr->row_info.pixel_depth + 7) >> 3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -421,14 +421,14 @@ png_write_row(png_structp png_ptr, png_bytep row)
 | 
				
			|||||||
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
 | 
					#if defined(PNG_WRITE_FLUSH_SUPPORTED)
 | 
				
			||||||
/* Set the automatic flush interval or 0 to turn flushing off */
 | 
					/* Set the automatic flush interval or 0 to turn flushing off */
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
png_set_flush(png_struct *png_ptr, int nrows)
 | 
					png_set_flush(png_structp png_ptr, int nrows)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	png_ptr->flush_dist = (nrows < 0 ? 0 : nrows);
 | 
						png_ptr->flush_dist = (nrows < 0 ? 0 : nrows);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* flush the current output buffers now */
 | 
					/* flush the current output buffers now */
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
png_write_flush(png_struct *png_ptr)
 | 
					png_write_flush(png_structp png_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int wrote_IDAT;
 | 
						int wrote_IDAT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -501,7 +501,7 @@ void
 | 
				
			|||||||
png_set_filtering(png_structp png_ptr, int filter)
 | 
					png_set_filtering(png_structp png_ptr, int filter)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
   png_ptr->do_custom_filter = 1;
 | 
					   png_ptr->do_custom_filter = 1;
 | 
				
			||||||
   png_ptr->do_filter = filter;
 | 
					   png_ptr->do_filter = (png_byte)filter;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										29
									
								
								pngwtran.c
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								pngwtran.c
									
									
									
									
									
								
							@ -1,10 +1,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* pngwtran.c - transforms the data in a row for png writers
 | 
					/* pngwtran.c - transforms the data in a row for png writers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PNG_INTERNAL
 | 
					#define PNG_INTERNAL
 | 
				
			||||||
@ -78,13 +78,13 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_byte bit_depth)
 | 
				
			|||||||
               else
 | 
					               else
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  mask = 0x80;
 | 
					                  mask = 0x80;
 | 
				
			||||||
                  *dp = v;
 | 
											*dp = (png_byte)v;
 | 
				
			||||||
						dp++;
 | 
											dp++;
 | 
				
			||||||
                  v = 0;
 | 
					                  v = 0;
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (mask != 0x80)
 | 
					            if (mask != 0x80)
 | 
				
			||||||
               *dp = v;
 | 
										*dp = (png_byte)v;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
         case 2:
 | 
					         case 2:
 | 
				
			||||||
@ -102,12 +102,12 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_byte bit_depth)
 | 
				
			|||||||
            v = 0;
 | 
					            v = 0;
 | 
				
			||||||
            for (i = 0; i < row_info->width; i++)
 | 
					            for (i = 0; i < row_info->width; i++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
               value = *sp & 0x3;
 | 
										value = (png_byte)(*sp & 0x3);
 | 
				
			||||||
               v |= (value << shift);
 | 
					               v |= (value << shift);
 | 
				
			||||||
               if (shift == 0)
 | 
					               if (shift == 0)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  shift = 6;
 | 
					                  shift = 6;
 | 
				
			||||||
                  *dp = v;
 | 
											*dp = (png_byte)v;
 | 
				
			||||||
                  dp++;
 | 
					                  dp++;
 | 
				
			||||||
                  v = 0;
 | 
					                  v = 0;
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
@ -116,7 +116,7 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_byte bit_depth)
 | 
				
			|||||||
               sp++;
 | 
					               sp++;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (shift != 6)
 | 
					            if (shift != 6)
 | 
				
			||||||
                   *dp = v;
 | 
										*dp = (png_byte)v;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
         case 4:
 | 
					         case 4:
 | 
				
			||||||
@ -134,13 +134,13 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_byte bit_depth)
 | 
				
			|||||||
            v = 0;
 | 
					            v = 0;
 | 
				
			||||||
            for (i = 0; i < row_info->width; i++)
 | 
					            for (i = 0; i < row_info->width; i++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
               value = *sp & 0xf;
 | 
										value = (png_byte)(*sp & 0xf);
 | 
				
			||||||
               v |= (value << shift);
 | 
					               v |= (value << shift);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
               if (shift == 0)
 | 
					               if (shift == 0)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  shift = 4;
 | 
					                  shift = 4;
 | 
				
			||||||
                  *dp = v;
 | 
											*dp = (png_byte)v;
 | 
				
			||||||
                  dp++;
 | 
					                  dp++;
 | 
				
			||||||
                  v = 0;
 | 
					                  v = 0;
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
@ -150,12 +150,12 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_byte bit_depth)
 | 
				
			|||||||
               sp++;
 | 
					               sp++;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (shift != 4)
 | 
					            if (shift != 4)
 | 
				
			||||||
               *dp = v;
 | 
										*dp = (png_byte)v;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      row_info->bit_depth = bit_depth;
 | 
					      row_info->bit_depth = bit_depth;
 | 
				
			||||||
      row_info->pixel_depth = bit_depth * row_info->channels;
 | 
							row_info->pixel_depth = (png_uint_16)(bit_depth * row_info->channels);
 | 
				
			||||||
      row_info->rowbytes =
 | 
					      row_info->rowbytes =
 | 
				
			||||||
         ((row_info->width * row_info->pixel_depth + 7) >> 3);
 | 
					         ((row_info->width * row_info->pixel_depth + 7) >> 3);
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
@ -276,7 +276,8 @@ png_do_shift(png_row_infop row_info, png_bytep row, png_color_8p bit_depth)
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
               png_uint_16 value, v;
 | 
					               png_uint_16 value, v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
               v = ((png_uint_16)(*bp) << 8) + (png_uint_16)(*(bp + 1));
 | 
										v = (png_uint_16)(((png_uint_16)(*bp) << 8) +
 | 
				
			||||||
 | 
											(png_uint_16)(*(bp + 1)));
 | 
				
			||||||
               value = 0;
 | 
					               value = 0;
 | 
				
			||||||
               for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
 | 
					               for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
@ -285,8 +286,8 @@ png_do_shift(png_row_infop row_info, png_bytep row, png_color_8p bit_depth)
 | 
				
			|||||||
                  else
 | 
					                  else
 | 
				
			||||||
                     value |= (png_uint_16)((v >> (-j)) & (png_uint_16)0xffff);
 | 
					                     value |= (png_uint_16)((v >> (-j)) & (png_uint_16)0xffff);
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
               *bp = value >> 8;
 | 
										*bp = (png_byte)(value >> 8);
 | 
				
			||||||
               *(bp + 1) = value & 0xff;
 | 
					               *(bp + 1) = (png_byte)(value & 0xff);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										77
									
								
								pngwutil.c
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								pngwutil.c
									
									
									
									
									
								
							@ -1,10 +1,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* pngwutil.c - utilities to write a png file
 | 
					/* pngwutil.c - utilities to write 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
 | 
					   For conditions of distribution and use, see copyright notice in png.h
 | 
				
			||||||
	Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
						Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 | 
				
			||||||
   January 10, 1996
 | 
					   January 15, 1996
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
#define PNG_INTERNAL
 | 
					#define PNG_INTERNAL
 | 
				
			||||||
#include "png.h"
 | 
					#include "png.h"
 | 
				
			||||||
@ -142,15 +142,15 @@ png_write_IHDR(png_structp png_ptr, png_uint_32 width, png_uint_32 height,
 | 
				
			|||||||
   /* pack the header information into the buffer */
 | 
					   /* pack the header information into the buffer */
 | 
				
			||||||
   png_save_uint_32(buf, width);
 | 
					   png_save_uint_32(buf, width);
 | 
				
			||||||
   png_save_uint_32(buf + 4, height);
 | 
					   png_save_uint_32(buf + 4, height);
 | 
				
			||||||
   buf[8] = bit_depth;
 | 
						buf[8] = (png_byte)bit_depth;
 | 
				
			||||||
   buf[9] = color_type;
 | 
						buf[9] = (png_byte)color_type;
 | 
				
			||||||
   buf[10] = compression_type;
 | 
						buf[10] = (png_byte)compression_type;
 | 
				
			||||||
   buf[11] = filter_type;
 | 
						buf[11] = (png_byte)filter_type;
 | 
				
			||||||
   buf[12] = interlace_type;
 | 
						buf[12] = (png_byte)interlace_type;
 | 
				
			||||||
	/* save off the relevent information */
 | 
						/* save off the relevent information */
 | 
				
			||||||
   png_ptr->bit_depth = bit_depth;
 | 
						png_ptr->bit_depth = (png_byte)bit_depth;
 | 
				
			||||||
   png_ptr->color_type = color_type;
 | 
						png_ptr->color_type = (png_byte)color_type;
 | 
				
			||||||
   png_ptr->interlaced = interlace_type;
 | 
						png_ptr->interlaced = (png_byte)interlace_type;
 | 
				
			||||||
   png_ptr->width = width;
 | 
					   png_ptr->width = width;
 | 
				
			||||||
   png_ptr->height = height;
 | 
					   png_ptr->height = height;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -170,7 +170,7 @@ png_write_IHDR(png_structp png_ptr, png_uint_32 width, png_uint_32 height,
 | 
				
			|||||||
         png_ptr->channels = 4;
 | 
					         png_ptr->channels = 4;
 | 
				
			||||||
         break;
 | 
					         break;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   png_ptr->pixel_depth = bit_depth * png_ptr->channels;
 | 
						png_ptr->pixel_depth = (png_byte)(bit_depth * png_ptr->channels);
 | 
				
			||||||
   png_ptr->rowbytes = ((width * (png_uint_32)png_ptr->pixel_depth + 7) >> 3);
 | 
					   png_ptr->rowbytes = ((width * (png_uint_32)png_ptr->pixel_depth + 7) >> 3);
 | 
				
			||||||
   /* set the usr info, so any transformations can modify it */
 | 
					   /* set the usr info, so any transformations can modify it */
 | 
				
			||||||
   png_ptr->usr_width = png_ptr->width;
 | 
					   png_ptr->usr_width = png_ptr->width;
 | 
				
			||||||
@ -184,7 +184,7 @@ png_write_IHDR(png_structp png_ptr, png_uint_32 width, png_uint_32 height,
 | 
				
			|||||||
   png_ptr->zstream = (z_stream *)png_malloc(png_ptr, sizeof (z_stream));
 | 
					   png_ptr->zstream = (z_stream *)png_malloc(png_ptr, sizeof (z_stream));
 | 
				
			||||||
   png_ptr->zstream->zalloc = png_zalloc;
 | 
					   png_ptr->zstream->zalloc = png_zalloc;
 | 
				
			||||||
   png_ptr->zstream->zfree = png_zfree;
 | 
					   png_ptr->zstream->zfree = png_zfree;
 | 
				
			||||||
   png_ptr->zstream->opaque = (voidp)png_ptr;
 | 
					   png_ptr->zstream->opaque = (voidpf)png_ptr;
 | 
				
			||||||
   if (!png_ptr->do_custom_filter)
 | 
					   if (!png_ptr->do_custom_filter)
 | 
				
			||||||
   {
 | 
					   {
 | 
				
			||||||
      if (png_ptr->color_type == 3 || png_ptr->bit_depth < 8)
 | 
					      if (png_ptr->color_type == 3 || png_ptr->bit_depth < 8)
 | 
				
			||||||
@ -477,11 +477,18 @@ png_write_zTXt(png_structp png_ptr, png_charp key, png_charp text,
 | 
				
			|||||||
            old_max = max_output_ptr;
 | 
					            old_max = max_output_ptr;
 | 
				
			||||||
            max_output_ptr = num_output_ptr + 4;
 | 
					            max_output_ptr = num_output_ptr + 4;
 | 
				
			||||||
				if (output_ptr)
 | 
									if (output_ptr)
 | 
				
			||||||
					output_ptr = (png_charpp)png_realloc(png_ptr, output_ptr,
 | 
									{
 | 
				
			||||||
						max_output_ptr * sizeof (png_charpp),
 | 
										png_charpp old_ptr;
 | 
				
			||||||
						old_max * sizeof (png_charp));
 | 
					
 | 
				
			||||||
 | 
										old_ptr = output_ptr;
 | 
				
			||||||
 | 
										output_ptr = (png_charpp)png_large_malloc(png_ptr,
 | 
				
			||||||
 | 
											max_output_ptr * sizeof (png_charpp));
 | 
				
			||||||
 | 
										png_memcpy(output_ptr, old_ptr,
 | 
				
			||||||
 | 
											(png_size_t)(old_max * sizeof (png_charp)));
 | 
				
			||||||
 | 
										png_large_free(png_ptr, old_ptr);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
					output_ptr = (png_charpp)png_malloc(png_ptr,
 | 
										output_ptr = (png_charpp)png_large_malloc(png_ptr,
 | 
				
			||||||
						max_output_ptr * sizeof (png_charp));
 | 
											max_output_ptr * sizeof (png_charp));
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -524,11 +531,18 @@ png_write_zTXt(png_structp png_ptr, png_charp key, png_charp text,
 | 
				
			|||||||
            old_max = max_output_ptr;
 | 
					            old_max = max_output_ptr;
 | 
				
			||||||
            max_output_ptr = num_output_ptr + 4;
 | 
					            max_output_ptr = num_output_ptr + 4;
 | 
				
			||||||
            if (output_ptr)
 | 
					            if (output_ptr)
 | 
				
			||||||
					output_ptr = (png_charpp)png_realloc(png_ptr, output_ptr,
 | 
									{
 | 
				
			||||||
						max_output_ptr * sizeof (png_charp),
 | 
										png_charpp old_ptr;
 | 
				
			||||||
						old_max * sizeof (png_charp));
 | 
					
 | 
				
			||||||
 | 
										old_ptr = output_ptr;
 | 
				
			||||||
 | 
										output_ptr = (png_charpp)png_large_malloc(png_ptr,
 | 
				
			||||||
 | 
											max_output_ptr * sizeof (png_charpp));
 | 
				
			||||||
 | 
										png_memcpy(output_ptr, old_ptr,
 | 
				
			||||||
 | 
											(png_size_t)(old_max * sizeof (png_charp)));
 | 
				
			||||||
 | 
										png_large_free(png_ptr, old_ptr);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
					output_ptr = (png_charpp)png_malloc(png_ptr,
 | 
										output_ptr = (png_charpp)png_large_malloc(png_ptr,
 | 
				
			||||||
						max_output_ptr * sizeof (png_charp));
 | 
											max_output_ptr * sizeof (png_charp));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -556,7 +570,7 @@ png_write_zTXt(png_structp png_ptr, png_charp key, png_charp text,
 | 
				
			|||||||
      (png_uint_32)(key_len + text_len + 2));
 | 
					      (png_uint_32)(key_len + text_len + 2));
 | 
				
			||||||
   /* write key */
 | 
					   /* write key */
 | 
				
			||||||
   png_write_chunk_data(png_ptr, (png_bytep )key, (png_uint_32)(key_len + 1));
 | 
					   png_write_chunk_data(png_ptr, (png_bytep )key, (png_uint_32)(key_len + 1));
 | 
				
			||||||
   buf[0] = compression;
 | 
						buf[0] = (png_byte)compression;
 | 
				
			||||||
   /* write compression */
 | 
					   /* write compression */
 | 
				
			||||||
   png_write_chunk_data(png_ptr, (png_bytep )buf, (png_uint_32)1);
 | 
					   png_write_chunk_data(png_ptr, (png_bytep )buf, (png_uint_32)1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -567,7 +581,7 @@ png_write_zTXt(png_structp png_ptr, png_charp key, png_charp text,
 | 
				
			|||||||
		png_large_free(png_ptr, output_ptr[i]);
 | 
							png_large_free(png_ptr, output_ptr[i]);
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   if (max_output_ptr)
 | 
					   if (max_output_ptr)
 | 
				
			||||||
      png_free(png_ptr, output_ptr);
 | 
					      png_large_free(png_ptr, output_ptr);
 | 
				
			||||||
   /* write anything left in zbuf */
 | 
					   /* write anything left in zbuf */
 | 
				
			||||||
   if (png_ptr->zstream->avail_out < png_ptr->zbuf_size)
 | 
					   if (png_ptr->zstream->avail_out < png_ptr->zbuf_size)
 | 
				
			||||||
      png_write_chunk_data(png_ptr, png_ptr->zbuf,
 | 
					      png_write_chunk_data(png_ptr, png_ptr->zbuf,
 | 
				
			||||||
@ -591,7 +605,7 @@ png_write_pHYs(png_structp png_ptr, png_uint_32 x_pixels_per_unit,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
   png_save_uint_32(buf, x_pixels_per_unit);
 | 
					   png_save_uint_32(buf, x_pixels_per_unit);
 | 
				
			||||||
   png_save_uint_32(buf + 4, y_pixels_per_unit);
 | 
					   png_save_uint_32(buf + 4, y_pixels_per_unit);
 | 
				
			||||||
   buf[8] = unit_type;
 | 
						buf[8] = (png_byte)unit_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   png_write_chunk(png_ptr, png_pHYs, buf, (png_uint_32)9);
 | 
					   png_write_chunk(png_ptr, png_pHYs, buf, (png_uint_32)9);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -608,7 +622,7 @@ png_write_oFFs(png_structp png_ptr, png_uint_32 x_offset,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
   png_save_uint_32(buf, x_offset);
 | 
					   png_save_uint_32(buf, x_offset);
 | 
				
			||||||
   png_save_uint_32(buf + 4, y_offset);
 | 
					   png_save_uint_32(buf + 4, y_offset);
 | 
				
			||||||
   buf[8] = unit_type;
 | 
						buf[8] = (png_byte)unit_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   png_write_chunk(png_ptr, png_oFFs, buf, (png_uint_32)9);
 | 
					   png_write_chunk(png_ptr, png_oFFs, buf, (png_uint_32)9);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -804,7 +818,7 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
 | 
				
			|||||||
               if (shift == 0)
 | 
					               if (shift == 0)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  shift = 7;
 | 
					                  shift = 7;
 | 
				
			||||||
                  *dp++ = d;
 | 
											*dp++ = (png_byte)d;
 | 
				
			||||||
                  d = 0;
 | 
					                  d = 0;
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
               else
 | 
					               else
 | 
				
			||||||
@ -812,7 +826,7 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (shift != 7)
 | 
					            if (shift != 7)
 | 
				
			||||||
               *dp = d;
 | 
										*dp = (png_byte)d;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
         case 2:
 | 
					         case 2:
 | 
				
			||||||
@ -838,14 +852,14 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
 | 
				
			|||||||
               if (shift == 0)
 | 
					               if (shift == 0)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                  shift = 6;
 | 
					                  shift = 6;
 | 
				
			||||||
                  *dp++ = d;
 | 
											*dp++ = (png_byte)d;
 | 
				
			||||||
                  d = 0;
 | 
					                  d = 0;
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
               else
 | 
					               else
 | 
				
			||||||
                  shift -= 2;
 | 
					                  shift -= 2;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (shift != 6)
 | 
					            if (shift != 6)
 | 
				
			||||||
                   *dp = d;
 | 
											 *dp = (png_byte)d;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
         case 4:
 | 
					         case 4:
 | 
				
			||||||
@ -871,14 +885,14 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
 | 
				
			|||||||
               if (shift == 0)
 | 
					               if (shift == 0)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
						shift = 4;
 | 
											shift = 4;
 | 
				
			||||||
                  *dp++ = d;
 | 
											*dp++ = (png_byte)d;
 | 
				
			||||||
                  d = 0;
 | 
					                  d = 0;
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
               else
 | 
					               else
 | 
				
			||||||
                  shift -= 4;
 | 
					                  shift -= 4;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (shift != 4)
 | 
					            if (shift != 4)
 | 
				
			||||||
               *dp = d;
 | 
										*dp = (png_byte)d;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
         default:
 | 
					         default:
 | 
				
			||||||
@ -1056,12 +1070,11 @@ png_write_filter_row(png_row_infop row_info, png_bytep row,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
   if (s4 < mins)
 | 
					   if (s4 < mins)
 | 
				
			||||||
   {
 | 
					   {
 | 
				
			||||||
      mins = s4;
 | 
					 | 
				
			||||||
      minf = 4;
 | 
					      minf = 4;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   /* set filter byte */
 | 
					   /* set filter byte */
 | 
				
			||||||
   row[0] = minf;
 | 
						row[0] = (png_byte)minf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   /* do filter */
 | 
					   /* do filter */
 | 
				
			||||||
   switch (minf)
 | 
					   switch (minf)
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
readme.txt - for libpng 0.86
 | 
					readme.txt - for libpng 0.87
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This is a bug fix for the second beta version of libpng 1.0, and
 | 
					This is a bug fix for the second beta version of libpng 1.0, and
 | 
				
			||||||
a first try at a progressive (push) reader.  It hasn't been
 | 
					a first try at a progressive (push) reader.  It hasn't been
 | 
				
			||||||
@ -60,6 +60,11 @@ You can reach me at:
 | 
				
			|||||||
internet: schalnat@group42.com
 | 
					internet: schalnat@group42.com
 | 
				
			||||||
CompuServe: 75501,1625
 | 
					CompuServe: 75501,1625
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					I tend to check my CompuServe account very infrequently, so you may
 | 
				
			||||||
 | 
					want to use the internet account.  If I don't answer your email
 | 
				
			||||||
 | 
					immediately, please be patient.  If you don't receive a reply within
 | 
				
			||||||
 | 
					a week, you may want to write and ask if I got the first email.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Please do not send me general questions about PNG.  Send them to
 | 
					Please do not send me general questions about PNG.  Send them to
 | 
				
			||||||
the address in the specification.  At the same time, please do
 | 
					the address in the specification.  At the same time, please do
 | 
				
			||||||
not send libpng questions to that address, send them to me.  I'll
 | 
					not send libpng questions to that address, send them to me.  I'll
 | 
				
			||||||
@ -70,7 +75,7 @@ and ...".  If in doubt, send questions to me.  I'll bounce them
 | 
				
			|||||||
to others, if necessary.
 | 
					to others, if necessary.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Please do not send suggestions on how to change PNG.  We have
 | 
					Please do not send suggestions on how to change PNG.  We have
 | 
				
			||||||
been discussing PNG for 9 months now, and it is official and
 | 
					been discussing PNG for over a year now, and it is official and
 | 
				
			||||||
finished.  If you have suggestions for libpng, however, I'll
 | 
					finished.  If you have suggestions for libpng, however, I'll
 | 
				
			||||||
gladly listen.  Even if your suggestion is not used for version
 | 
					gladly listen.  Even if your suggestion is not used for version
 | 
				
			||||||
1.0, it may be used later.
 | 
					1.0, it may be used later.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user