AshanGimhana's picture
Upload folder using huggingface_hub
9375c9a verified
<html><!-- Created using the cpp_pretty_printer from the dlib C++ library. See http://dlib.net for updates. --><head><title>dlib C++ Library - pngerror.c</title></head><body bgcolor='white'><pre>
<font color='#009900'>/* pngerror.c - stub functions for i/o and memory allocation
*
* Last changed in libpng 1.6.1 [March 28, 2013]
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*
* This file provides a location for all error handling. Users who
* need special error handling are expected to write replacement functions
* and use png_set_error_fn() to use those functions. See the instructions
* at each function.
*/</font>
<font color='#0000FF'>#include</font> "<a style='text-decoration:none' href='pngpriv.h.html'>pngpriv.h</a>"
<font color='#0000FF'>#if</font> defined<font face='Lucida Console'>(</font>PNG_READ_SUPPORTED<font face='Lucida Console'>)</font> <font color='#5555FF'>|</font><font color='#5555FF'>|</font> defined<font face='Lucida Console'>(</font>PNG_WRITE_SUPPORTED<font face='Lucida Console'>)</font>
<font color='#0000FF'>static</font> <b><a name='PNG_FUNCTION'></a>PNG_FUNCTION</b><font face='Lucida Console'>(</font><font color='#0000FF'><u>void</u></font>, png_default_error,<font color='#BB00BB'>PNGARG</font><font face='Lucida Console'>(</font><font face='Lucida Console'>(</font>png_const_structrp png_ptr,
png_const_charp error_message<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>,PNG_NORETURN<font face='Lucida Console'>)</font>;
<font color='#0000FF'>#ifdef</font> PNG_WARNINGS_SUPPORTED
<font color='#0000FF'>static</font> <font color='#0000FF'><u>void</u></font> <font color='#009900'>/* PRIVATE */</font>
png_default_warning <b><a name='PNGARG'></a>PNGARG</b><font face='Lucida Console'>(</font><font face='Lucida Console'>(</font>png_const_structrp png_ptr,
png_const_charp warning_message<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>;
<font color='#0000FF'>#endif</font> <font color='#009900'>/* PNG_WARNINGS_SUPPORTED */</font>
<font color='#009900'>/* This function is called whenever there is a fatal error. This function
* should not be changed. If there is a need to handle errors differently,
* you should supply a replacement error function and use png_set_error_fn()
* to replace the error function at run-time.
*/</font>
<font color='#0000FF'>#ifdef</font> PNG_ERROR_TEXT_SUPPORTED
<b><a name='PNG_FUNCTION'></a>PNG_FUNCTION</b><font face='Lucida Console'>(</font><font color='#0000FF'><u>void</u></font>,PNGAPI
png_error,<font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_const_charp error_message<font face='Lucida Console'>)</font>,
PNG_NORETURN<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>#ifdef</font> PNG_ERROR_NUMBERS_SUPPORTED
<font color='#0000FF'><u>char</u></font> msg[<font color='#979000'>16</font>];
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>flags<font color='#5555FF'>&amp;</font>
<font face='Lucida Console'>(</font>PNG_FLAG_STRIP_ERROR_NUMBERS<font color='#5555FF'>|</font>PNG_FLAG_STRIP_ERROR_TEXT<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font color='#5555FF'>*</font>error_message <font color='#5555FF'>=</font><font color='#5555FF'>=</font> PNG_LITERAL_SHARP<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#009900'>/* Strip "#nnnn " from beginning of error message. */</font>
<font color='#0000FF'><u>int</u></font> offset;
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font>offset <font color='#5555FF'>=</font> <font color='#979000'>1</font>; offset<font color='#5555FF'>&lt;</font><font color='#979000'>15</font>; offset<font color='#5555FF'>+</font><font color='#5555FF'>+</font><font face='Lucida Console'>)</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>error_message[offset] <font color='#5555FF'>=</font><font color='#5555FF'>=</font> '<font color='#FF0000'> </font>'<font face='Lucida Console'>)</font>
<font color='#0000FF'>break</font>;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>flags<font color='#5555FF'>&amp;</font>PNG_FLAG_STRIP_ERROR_TEXT<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'><u>int</u></font> i;
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font>i <font color='#5555FF'>=</font> <font color='#979000'>0</font>; i <font color='#5555FF'>&lt;</font> offset <font color='#5555FF'>-</font> <font color='#979000'>1</font>; i<font color='#5555FF'>+</font><font color='#5555FF'>+</font><font face='Lucida Console'>)</font>
msg[i] <font color='#5555FF'>=</font> error_message[i <font color='#5555FF'>+</font> <font color='#979000'>1</font>];
msg[i <font color='#5555FF'>-</font> <font color='#979000'>1</font>] <font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>';
error_message <font color='#5555FF'>=</font> msg;
<b>}</b>
<font color='#0000FF'>else</font>
error_message <font color='#5555FF'>+</font><font color='#5555FF'>=</font> offset;
<b>}</b>
<font color='#0000FF'>else</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>flags<font color='#5555FF'>&amp;</font>PNG_FLAG_STRIP_ERROR_TEXT<font face='Lucida Console'>)</font>
<b>{</b>
msg[<font color='#979000'>0</font>] <font color='#5555FF'>=</font> '<font color='#FF0000'>0</font>';
msg[<font color='#979000'>1</font>] <font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>';
error_message <font color='#5555FF'>=</font> msg;
<b>}</b>
<b>}</b>
<b>}</b>
<b>}</b>
<font color='#0000FF'>#endif</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_fn <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<font face='Lucida Console'>(</font><font color='#5555FF'>*</font><font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_fn<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font><font face='Lucida Console'>(</font><font color='#BB00BB'>png_constcast</font><font face='Lucida Console'>(</font>png_structrp,png_ptr<font face='Lucida Console'>)</font>,
error_message<font face='Lucida Console'>)</font>;
<font color='#009900'>/* If the custom handler doesn't exist, or if it returns,
use the default handler, which will not return. */</font>
<font color='#BB00BB'>png_default_error</font><font face='Lucida Console'>(</font>png_ptr, error_message<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>#else</font>
<b><a name='PNG_FUNCTION'></a>PNG_FUNCTION</b><font face='Lucida Console'>(</font><font color='#0000FF'><u>void</u></font>,PNGAPI
png_err,<font face='Lucida Console'>(</font>png_const_structrp png_ptr<font face='Lucida Console'>)</font>,PNG_NORETURN<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#009900'>/* Prior to 1.5.2 the error_fn received a NULL pointer, expressed
* erroneously as '\0', instead of the empty string "". This was
* apparently an error, introduced in libpng-1.2.20, and png_default_error
* will crash in this case.
*/</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_fn <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<font face='Lucida Console'>(</font><font color='#5555FF'>*</font><font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_fn<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font><font face='Lucida Console'>(</font><font color='#BB00BB'>png_constcast</font><font face='Lucida Console'>(</font>png_structrp,png_ptr<font face='Lucida Console'>)</font>, "<font color='#CC0000'></font>"<font face='Lucida Console'>)</font>;
<font color='#009900'>/* If the custom handler doesn't exist, or if it returns,
use the default handler, which will not return. */</font>
<font color='#BB00BB'>png_default_error</font><font face='Lucida Console'>(</font>png_ptr, "<font color='#CC0000'></font>"<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>#endif</font> <font color='#009900'>/* PNG_ERROR_TEXT_SUPPORTED */</font>
<font color='#009900'>/* Utility to safely appends strings to a buffer. This never errors out so
* error checking is not required in the caller.
*/</font>
<font color='#0000FF'><u>size_t</u></font>
<b><a name='png_safecat'></a>png_safecat</b><font face='Lucida Console'>(</font>png_charp buffer, <font color='#0000FF'><u>size_t</u></font> bufsize, <font color='#0000FF'><u>size_t</u></font> pos,
png_const_charp string<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>buffer <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> pos <font color='#5555FF'>&lt;</font> bufsize<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>string <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<font color='#0000FF'>while</font> <font face='Lucida Console'>(</font><font color='#5555FF'>*</font>string <font color='#5555FF'>!</font><font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>' <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> pos <font color='#5555FF'>&lt;</font> bufsize<font color='#5555FF'>-</font><font color='#979000'>1</font><font face='Lucida Console'>)</font>
buffer[pos<font color='#5555FF'>+</font><font color='#5555FF'>+</font>] <font color='#5555FF'>=</font> <font color='#5555FF'>*</font>string<font color='#5555FF'>+</font><font color='#5555FF'>+</font>;
buffer[pos] <font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>';
<b>}</b>
<font color='#0000FF'>return</font> pos;
<b>}</b>
<font color='#0000FF'>#if</font> defined<font face='Lucida Console'>(</font>PNG_WARNINGS_SUPPORTED<font face='Lucida Console'>)</font> <font color='#5555FF'>|</font><font color='#5555FF'>|</font> defined<font face='Lucida Console'>(</font>PNG_TIME_RFC1123_SUPPORTED<font face='Lucida Console'>)</font>
<font color='#009900'>/* Utility to dump an unsigned value into a buffer, given a start pointer and
* and end pointer (which should point just *beyond* the end of the buffer!)
* Returns the pointer to the start of the formatted string.
*/</font>
png_charp
<b><a name='png_format_number'></a>png_format_number</b><font face='Lucida Console'>(</font>png_const_charp start, png_charp end, <font color='#0000FF'><u>int</u></font> format,
png_alloc_size_t number<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'><u>int</u></font> count <font color='#5555FF'>=</font> <font color='#979000'>0</font>; <font color='#009900'>/* number of digits output */</font>
<font color='#0000FF'><u>int</u></font> mincount <font color='#5555FF'>=</font> <font color='#979000'>1</font>; <font color='#009900'>/* minimum number required */</font>
<font color='#0000FF'><u>int</u></font> output <font color='#5555FF'>=</font> <font color='#979000'>0</font>; <font color='#009900'>/* digit output (for the fixed point format) */</font>
<font color='#5555FF'>*</font><font color='#5555FF'>-</font><font color='#5555FF'>-</font>end <font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>';
<font color='#009900'>/* This is written so that the loop always runs at least once, even with
* number zero.
*/</font>
<font color='#0000FF'>while</font> <font face='Lucida Console'>(</font>end <font color='#5555FF'>&gt;</font> start <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> <font face='Lucida Console'>(</font>number <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font> <font color='#5555FF'>|</font><font color='#5555FF'>|</font> count <font color='#5555FF'>&lt;</font> mincount<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>static</font> <font color='#0000FF'>const</font> <font color='#0000FF'><u>char</u></font> digits[] <font color='#5555FF'>=</font> "<font color='#CC0000'>0123456789ABCDEF</font>";
<font color='#0000FF'>switch</font> <font face='Lucida Console'>(</font>format<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>case</font> PNG_NUMBER_FORMAT_fixed:
<font color='#009900'>/* Needs five digits (the fraction) */</font>
mincount <font color='#5555FF'>=</font> <font color='#979000'>5</font>;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>output <font color='#5555FF'>|</font><font color='#5555FF'>|</font> number <font color='#5555FF'>%</font> <font color='#979000'>10</font> <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font>
<b>{</b>
<font color='#5555FF'>*</font><font color='#5555FF'>-</font><font color='#5555FF'>-</font>end <font color='#5555FF'>=</font> digits[number <font color='#5555FF'>%</font> <font color='#979000'>10</font>];
output <font color='#5555FF'>=</font> <font color='#979000'>1</font>;
<b>}</b>
number <font color='#5555FF'>/</font><font color='#5555FF'>=</font> <font color='#979000'>10</font>;
<font color='#0000FF'>break</font>;
<font color='#0000FF'>case</font> PNG_NUMBER_FORMAT_02u:
<font color='#009900'>/* Expects at least 2 digits. */</font>
mincount <font color='#5555FF'>=</font> <font color='#979000'>2</font>;
<font color='#009900'>/* FALL THROUGH */</font>
<font color='#0000FF'>case</font> PNG_NUMBER_FORMAT_u:
<font color='#5555FF'>*</font><font color='#5555FF'>-</font><font color='#5555FF'>-</font>end <font color='#5555FF'>=</font> digits[number <font color='#5555FF'>%</font> <font color='#979000'>10</font>];
number <font color='#5555FF'>/</font><font color='#5555FF'>=</font> <font color='#979000'>10</font>;
<font color='#0000FF'>break</font>;
<font color='#0000FF'>case</font> PNG_NUMBER_FORMAT_02x:
<font color='#009900'>/* This format expects at least two digits */</font>
mincount <font color='#5555FF'>=</font> <font color='#979000'>2</font>;
<font color='#009900'>/* FALL THROUGH */</font>
<font color='#0000FF'>case</font> PNG_NUMBER_FORMAT_x:
<font color='#5555FF'>*</font><font color='#5555FF'>-</font><font color='#5555FF'>-</font>end <font color='#5555FF'>=</font> digits[number <font color='#5555FF'>&amp;</font> <font color='#979000'>0xf</font>];
number <font color='#5555FF'>&gt;</font><font color='#5555FF'>&gt;</font><font color='#5555FF'>=</font> <font color='#979000'>4</font>;
<font color='#0000FF'>break</font>;
<font color='#0000FF'>default</font>: <font color='#009900'>/* an error */</font>
number <font color='#5555FF'>=</font> <font color='#979000'>0</font>;
<font color='#0000FF'>break</font>;
<b>}</b>
<font color='#009900'>/* Keep track of the number of digits added */</font>
<font color='#5555FF'>+</font><font color='#5555FF'>+</font>count;
<font color='#009900'>/* Float a fixed number here: */</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>format <font color='#5555FF'>=</font><font color='#5555FF'>=</font> PNG_NUMBER_FORMAT_fixed<font face='Lucida Console'>)</font> <font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>count <font color='#5555FF'>=</font><font color='#5555FF'>=</font> <font color='#979000'>5</font><font face='Lucida Console'>)</font> <font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>end <font color='#5555FF'>&gt;</font> start<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#009900'>/* End of the fraction, but maybe nothing was output? In that case
* drop the decimal point. If the number is a true zero handle that
* here.
*/</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>output<font face='Lucida Console'>)</font>
<font color='#5555FF'>*</font><font color='#5555FF'>-</font><font color='#5555FF'>-</font>end <font color='#5555FF'>=</font> '<font color='#FF0000'>.</font>';
<font color='#0000FF'>else</font> <font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>number <font color='#5555FF'>=</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font> <font color='#009900'>/* and !output */</font>
<font color='#5555FF'>*</font><font color='#5555FF'>-</font><font color='#5555FF'>-</font>end <font color='#5555FF'>=</font> '<font color='#FF0000'>0</font>';
<b>}</b>
<b>}</b>
<font color='#0000FF'>return</font> end;
<b>}</b>
<font color='#0000FF'>#endif</font>
<font color='#0000FF'>#ifdef</font> PNG_WARNINGS_SUPPORTED
<font color='#009900'>/* This function is called whenever there is a non-fatal error. This function
* should not be changed. If there is a need to handle warnings differently,
* you should supply a replacement warning function and use
* png_set_error_fn() to replace the warning function at run-time.
*/</font>
<font color='#0000FF'><u>void</u></font> PNGAPI
<b><a name='png_warning'></a>png_warning</b><font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_const_charp warning_message<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'><u>int</u></font> offset <font color='#5555FF'>=</font> <font color='#979000'>0</font>;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>#ifdef</font> PNG_ERROR_NUMBERS_SUPPORTED
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>flags<font color='#5555FF'>&amp;</font>
<font face='Lucida Console'>(</font>PNG_FLAG_STRIP_ERROR_NUMBERS<font color='#5555FF'>|</font>PNG_FLAG_STRIP_ERROR_TEXT<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>
<font color='#0000FF'>#endif</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font color='#5555FF'>*</font>warning_message <font color='#5555FF'>=</font><font color='#5555FF'>=</font> PNG_LITERAL_SHARP<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font>offset <font color='#5555FF'>=</font> <font color='#979000'>1</font>; offset <font color='#5555FF'>&lt;</font> <font color='#979000'>15</font>; offset<font color='#5555FF'>+</font><font color='#5555FF'>+</font><font face='Lucida Console'>)</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>warning_message[offset] <font color='#5555FF'>=</font><font color='#5555FF'>=</font> '<font color='#FF0000'> </font>'<font face='Lucida Console'>)</font>
<font color='#0000FF'>break</font>;
<b>}</b>
<b>}</b>
<b>}</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>warning_fn <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<font face='Lucida Console'>(</font><font color='#5555FF'>*</font><font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>warning_fn<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font><font face='Lucida Console'>(</font><font color='#BB00BB'>png_constcast</font><font face='Lucida Console'>(</font>png_structrp,png_ptr<font face='Lucida Console'>)</font>,
warning_message <font color='#5555FF'>+</font> offset<font face='Lucida Console'>)</font>;
<font color='#0000FF'>else</font>
<font color='#BB00BB'>png_default_warning</font><font face='Lucida Console'>(</font>png_ptr, warning_message <font color='#5555FF'>+</font> offset<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#009900'>/* These functions support 'formatted' warning messages with up to
* PNG_WARNING_PARAMETER_COUNT parameters. In the format string the parameter
* is introduced by @&lt;number&gt;, where 'number' starts at 1. This follows the
* standard established by X/Open for internationalizable error messages.
*/</font>
<font color='#0000FF'><u>void</u></font>
<b><a name='png_warning_parameter'></a>png_warning_parameter</b><font face='Lucida Console'>(</font>png_warning_parameters p, <font color='#0000FF'><u>int</u></font> number,
png_const_charp string<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>number <font color='#5555FF'>&gt;</font> <font color='#979000'>0</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> number <font color='#5555FF'>&lt;</font><font color='#5555FF'>=</font> PNG_WARNING_PARAMETER_COUNT<font face='Lucida Console'>)</font>
<font face='Lucida Console'>(</font><font color='#0000FF'><u>void</u></font><font face='Lucida Console'>)</font><font color='#BB00BB'>png_safecat</font><font face='Lucida Console'>(</font>p[number<font color='#5555FF'>-</font><font color='#979000'>1</font>], <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> p[number<font color='#5555FF'>-</font><font color='#979000'>1</font>]<font face='Lucida Console'>)</font>, <font color='#979000'>0</font>, string<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'><u>void</u></font>
<b><a name='png_warning_parameter_unsigned'></a>png_warning_parameter_unsigned</b><font face='Lucida Console'>(</font>png_warning_parameters p, <font color='#0000FF'><u>int</u></font> number, <font color='#0000FF'><u>int</u></font> format,
png_alloc_size_t value<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'><u>char</u></font> buffer[PNG_NUMBER_BUFFER_SIZE];
<font color='#BB00BB'>png_warning_parameter</font><font face='Lucida Console'>(</font>p, number, <font color='#BB00BB'>PNG_FORMAT_NUMBER</font><font face='Lucida Console'>(</font>buffer, format, value<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'><u>void</u></font>
<b><a name='png_warning_parameter_signed'></a>png_warning_parameter_signed</b><font face='Lucida Console'>(</font>png_warning_parameters p, <font color='#0000FF'><u>int</u></font> number, <font color='#0000FF'><u>int</u></font> format,
png_int_32 value<font face='Lucida Console'>)</font>
<b>{</b>
png_alloc_size_t u;
png_charp str;
<font color='#0000FF'><u>char</u></font> buffer[PNG_NUMBER_BUFFER_SIZE];
<font color='#009900'>/* Avoid overflow by doing the negate in a png_alloc_size_t: */</font>
u <font color='#5555FF'>=</font> <font face='Lucida Console'>(</font>png_alloc_size_t<font face='Lucida Console'>)</font>value;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>value <font color='#5555FF'>&lt;</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font>
u <font color='#5555FF'>=</font> ~u <font color='#5555FF'>+</font> <font color='#979000'>1</font>;
str <font color='#5555FF'>=</font> <font color='#BB00BB'>PNG_FORMAT_NUMBER</font><font face='Lucida Console'>(</font>buffer, format, u<font face='Lucida Console'>)</font>;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>value <font color='#5555FF'>&lt;</font> <font color='#979000'>0</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> str <font color='#5555FF'>&gt;</font> buffer<font face='Lucida Console'>)</font>
<font color='#5555FF'>*</font><font color='#5555FF'>-</font><font color='#5555FF'>-</font>str <font color='#5555FF'>=</font> '<font color='#FF0000'>-</font>';
<font color='#BB00BB'>png_warning_parameter</font><font face='Lucida Console'>(</font>p, number, str<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'><u>void</u></font>
<b><a name='png_formatted_warning'></a>png_formatted_warning</b><font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_warning_parameters p,
png_const_charp message<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#009900'>/* The internal buffer is just 192 bytes - enough for all our messages,
* overflow doesn't happen because this code checks! If someone figures
* out how to send us a message longer than 192 bytes, all that will
* happen is that the message will be truncated appropriately.
*/</font>
<font color='#0000FF'><u>size_t</u></font> i <font color='#5555FF'>=</font> <font color='#979000'>0</font>; <font color='#009900'>/* Index in the msg[] buffer: */</font>
<font color='#0000FF'><u>char</u></font> msg[<font color='#979000'>192</font>];
<font color='#009900'>/* Each iteration through the following loop writes at most one character
* to msg[i++] then returns here to validate that there is still space for
* the trailing '\0'. It may (in the case of a parameter) read more than
* one character from message[]; it must check for '\0' and continue to the
* test if it finds the end of string.
*/</font>
<font color='#0000FF'>while</font> <font face='Lucida Console'>(</font>i<font color='#5555FF'>&lt;</font><font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> msg<font face='Lucida Console'>)</font><font color='#5555FF'>-</font><font color='#979000'>1</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> <font color='#5555FF'>*</font>message <font color='#5555FF'>!</font><font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>'<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#009900'>/* '@' at end of string is now just printed (previously it was skipped);
* it is an error in the calling code to terminate the string with @.
*/</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>p <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> <font color='#5555FF'>*</font>message <font color='#5555FF'>=</font><font color='#5555FF'>=</font> '<font color='#FF0000'>@</font>' <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> message[<font color='#979000'>1</font>] <font color='#5555FF'>!</font><font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>'<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'><u>int</u></font> parameter_char <font color='#5555FF'>=</font> <font color='#5555FF'>*</font><font color='#5555FF'>+</font><font color='#5555FF'>+</font>message; <font color='#009900'>/* Consume the '@' */</font>
<font color='#0000FF'>static</font> <font color='#0000FF'>const</font> <font color='#0000FF'><u>char</u></font> valid_parameters[] <font color='#5555FF'>=</font> "<font color='#CC0000'>123456789</font>";
<font color='#0000FF'><u>int</u></font> parameter <font color='#5555FF'>=</font> <font color='#979000'>0</font>;
<font color='#009900'>/* Search for the parameter digit, the index in the string is the
* parameter to use.
*/</font>
<font color='#0000FF'>while</font> <font face='Lucida Console'>(</font>valid_parameters[parameter] <font color='#5555FF'>!</font><font color='#5555FF'>=</font> parameter_char <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font>
valid_parameters[parameter] <font color='#5555FF'>!</font><font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>'<font face='Lucida Console'>)</font>
<font color='#5555FF'>+</font><font color='#5555FF'>+</font>parameter;
<font color='#009900'>/* If the parameter digit is out of range it will just get printed. */</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>parameter <font color='#5555FF'>&lt;</font> PNG_WARNING_PARAMETER_COUNT<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#009900'>/* Append this parameter */</font>
png_const_charp parm <font color='#5555FF'>=</font> p[parameter];
png_const_charp pend <font color='#5555FF'>=</font> p[parameter] <font color='#5555FF'>+</font> <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> p[parameter]<font face='Lucida Console'>)</font>;
<font color='#009900'>/* No need to copy the trailing '\0' here, but there is no guarantee
* that parm[] has been initialized, so there is no guarantee of a
* trailing '\0':
*/</font>
<font color='#0000FF'>while</font> <font face='Lucida Console'>(</font>i<font color='#5555FF'>&lt;</font><font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> msg<font face='Lucida Console'>)</font><font color='#5555FF'>-</font><font color='#979000'>1</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> <font color='#5555FF'>*</font>parm <font color='#5555FF'>!</font><font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>' <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> parm <font color='#5555FF'>&lt;</font> pend<font face='Lucida Console'>)</font>
msg[i<font color='#5555FF'>+</font><font color='#5555FF'>+</font>] <font color='#5555FF'>=</font> <font color='#5555FF'>*</font>parm<font color='#5555FF'>+</font><font color='#5555FF'>+</font>;
<font color='#009900'>/* Consume the parameter digit too: */</font>
<font color='#5555FF'>+</font><font color='#5555FF'>+</font>message;
<font color='#0000FF'>continue</font>;
<b>}</b>
<font color='#009900'>/* else not a parameter and there is a character after the @ sign; just
* copy that. This is known not to be '\0' because of the test above.
*/</font>
<b>}</b>
<font color='#009900'>/* At this point *message can't be '\0', even in the bad parameter case
* above where there is a lone '@' at the end of the message string.
*/</font>
msg[i<font color='#5555FF'>+</font><font color='#5555FF'>+</font>] <font color='#5555FF'>=</font> <font color='#5555FF'>*</font>message<font color='#5555FF'>+</font><font color='#5555FF'>+</font>;
<b>}</b>
<font color='#009900'>/* i is always less than (sizeof msg), so: */</font>
msg[i] <font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>';
<font color='#009900'>/* And this is the formatted message. It may be larger than
* PNG_MAX_ERROR_TEXT, but that is only used for 'chunk' errors and these
* are not (currently) formatted.
*/</font>
<font color='#BB00BB'>png_warning</font><font face='Lucida Console'>(</font>png_ptr, msg<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>#endif</font> <font color='#009900'>/* PNG_WARNINGS_SUPPORTED */</font>
<font color='#0000FF'>#ifdef</font> PNG_BENIGN_ERRORS_SUPPORTED
<font color='#0000FF'><u>void</u></font> PNGAPI
<b><a name='png_benign_error'></a>png_benign_error</b><font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_const_charp error_message<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>flags <font color='#5555FF'>&amp;</font> PNG_FLAG_BENIGN_ERRORS_WARN<font face='Lucida Console'>)</font>
<b>{</b>
# ifdef PNG_READ_SUPPORTED
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>mode <font color='#5555FF'>&amp;</font> PNG_IS_READ_STRUCT<font face='Lucida Console'>)</font> <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>chunk_name <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font>
<font color='#BB00BB'>png_chunk_warning</font><font face='Lucida Console'>(</font>png_ptr, error_message<font face='Lucida Console'>)</font>;
<font color='#0000FF'>else</font>
# endif
<font color='#BB00BB'>png_warning</font><font face='Lucida Console'>(</font>png_ptr, error_message<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>else</font>
<b>{</b>
# ifdef PNG_READ_SUPPORTED
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>mode <font color='#5555FF'>&amp;</font> PNG_IS_READ_STRUCT<font face='Lucida Console'>)</font> <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>chunk_name <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font>
<font color='#BB00BB'>png_chunk_error</font><font face='Lucida Console'>(</font>png_ptr, error_message<font face='Lucida Console'>)</font>;
<font color='#0000FF'>else</font>
# endif
<font color='#BB00BB'>png_error</font><font face='Lucida Console'>(</font>png_ptr, error_message<font face='Lucida Console'>)</font>;
<b>}</b>
<b>}</b>
<font color='#0000FF'><u>void</u></font> <font color='#009900'>/* PRIVATE */</font>
<b><a name='png_app_warning'></a>png_app_warning</b><font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_const_charp error_message<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>flags <font color='#5555FF'>&amp;</font> PNG_FLAG_APP_WARNINGS_WARN<font face='Lucida Console'>)</font>
<font color='#BB00BB'>png_warning</font><font face='Lucida Console'>(</font>png_ptr, error_message<font face='Lucida Console'>)</font>;
<font color='#0000FF'>else</font>
<font color='#BB00BB'>png_error</font><font face='Lucida Console'>(</font>png_ptr, error_message<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'><u>void</u></font> <font color='#009900'>/* PRIVATE */</font>
<b><a name='png_app_error'></a>png_app_error</b><font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_const_charp error_message<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>flags <font color='#5555FF'>&amp;</font> PNG_FLAG_APP_ERRORS_WARN<font face='Lucida Console'>)</font>
<font color='#BB00BB'>png_warning</font><font face='Lucida Console'>(</font>png_ptr, error_message<font face='Lucida Console'>)</font>;
<font color='#0000FF'>else</font>
<font color='#BB00BB'>png_error</font><font face='Lucida Console'>(</font>png_ptr, error_message<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>#endif</font> <font color='#009900'>/* BENIGN_ERRORS */</font>
<font color='#009900'>/* These utilities are used internally to build an error message that relates
* to the current chunk. The chunk name comes from png_ptr-&gt;chunk_name,
* this is used to prefix the message. The message is limited in length
* to 63 bytes, the name characters are output as hex digits wrapped in []
* if the character is invalid.
*/</font>
<font color='#0000FF'>#define</font> isnonalpha<font face='Lucida Console'>(</font>c<font face='Lucida Console'>)</font> <font face='Lucida Console'>(</font><font face='Lucida Console'>(</font>c<font face='Lucida Console'>)</font> <font color='#5555FF'>&lt;</font> <font color='#979000'>65</font> <font color='#5555FF'>|</font><font color='#5555FF'>|</font> <font face='Lucida Console'>(</font>c<font face='Lucida Console'>)</font> <font color='#5555FF'>&gt;</font> <font color='#979000'>122</font> <font color='#5555FF'>|</font><font color='#5555FF'>|</font> <font face='Lucida Console'>(</font><font face='Lucida Console'>(</font>c<font face='Lucida Console'>)</font> <font color='#5555FF'>&gt;</font> <font color='#979000'>90</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> <font face='Lucida Console'>(</font>c<font face='Lucida Console'>)</font> <font color='#5555FF'>&lt;</font> <font color='#979000'>97</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>
<font color='#0000FF'>static</font> PNG_CONST <font color='#0000FF'><u>char</u></font> png_digit[<font color='#979000'>16</font>] <font color='#5555FF'>=</font> <b>{</b>
'<font color='#FF0000'>0</font>', '<font color='#FF0000'>1</font>', '<font color='#FF0000'>2</font>', '<font color='#FF0000'>3</font>', '<font color='#FF0000'>4</font>', '<font color='#FF0000'>5</font>', '<font color='#FF0000'>6</font>', '<font color='#FF0000'>7</font>', '<font color='#FF0000'>8</font>', '<font color='#FF0000'>9</font>',
'<font color='#FF0000'>A</font>', '<font color='#FF0000'>B</font>', '<font color='#FF0000'>C</font>', '<font color='#FF0000'>D</font>', '<font color='#FF0000'>E</font>', '<font color='#FF0000'>F</font>'
<b>}</b>;
<font color='#0000FF'>#define</font> PNG_MAX_ERROR_TEXT <font color='#979000'>196</font> <font color='#009900'>/* Currently limited be profile_error in png.c */</font>
<font color='#0000FF'>#if</font> defined<font face='Lucida Console'>(</font>PNG_WARNINGS_SUPPORTED<font face='Lucida Console'>)</font> <font color='#5555FF'>|</font><font color='#5555FF'>|</font> defined<font face='Lucida Console'>(</font>PNG_ERROR_TEXT_SUPPORTED<font face='Lucida Console'>)</font>
<font color='#0000FF'>static</font> <font color='#0000FF'><u>void</u></font> <font color='#009900'>/* PRIVATE */</font>
<b><a name='png_format_buffer'></a>png_format_buffer</b><font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_charp buffer, png_const_charp
error_message<font face='Lucida Console'>)</font>
<b>{</b>
png_uint_32 chunk_name <font color='#5555FF'>=</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>chunk_name;
<font color='#0000FF'><u>int</u></font> iout <font color='#5555FF'>=</font> <font color='#979000'>0</font>, ishift <font color='#5555FF'>=</font> <font color='#979000'>24</font>;
<font color='#0000FF'>while</font> <font face='Lucida Console'>(</font>ishift <font color='#5555FF'>&gt;</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'><u>int</u></font> c <font color='#5555FF'>=</font> <font face='Lucida Console'>(</font><font color='#0000FF'><u>int</u></font><font face='Lucida Console'>)</font><font face='Lucida Console'>(</font>chunk_name <font color='#5555FF'>&gt;</font><font color='#5555FF'>&gt;</font> ishift<font face='Lucida Console'>)</font> <font color='#5555FF'>&amp;</font> <font color='#979000'>0xff</font>;
ishift <font color='#5555FF'>-</font><font color='#5555FF'>=</font> <font color='#979000'>8</font>;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font color='#BB00BB'>isnonalpha</font><font face='Lucida Console'>(</font>c<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>
<b>{</b>
buffer[iout<font color='#5555FF'>+</font><font color='#5555FF'>+</font>] <font color='#5555FF'>=</font> PNG_LITERAL_LEFT_SQUARE_BRACKET;
buffer[iout<font color='#5555FF'>+</font><font color='#5555FF'>+</font>] <font color='#5555FF'>=</font> png_digit[<font face='Lucida Console'>(</font>c <font color='#5555FF'>&amp;</font> <font color='#979000'>0xf0</font><font face='Lucida Console'>)</font> <font color='#5555FF'>&gt;</font><font color='#5555FF'>&gt;</font> <font color='#979000'>4</font>];
buffer[iout<font color='#5555FF'>+</font><font color='#5555FF'>+</font>] <font color='#5555FF'>=</font> png_digit[c <font color='#5555FF'>&amp;</font> <font color='#979000'>0x0f</font>];
buffer[iout<font color='#5555FF'>+</font><font color='#5555FF'>+</font>] <font color='#5555FF'>=</font> PNG_LITERAL_RIGHT_SQUARE_BRACKET;
<b>}</b>
<font color='#0000FF'>else</font>
<b>{</b>
buffer[iout<font color='#5555FF'>+</font><font color='#5555FF'>+</font>] <font color='#5555FF'>=</font> <font face='Lucida Console'>(</font><font color='#0000FF'><u>char</u></font><font face='Lucida Console'>)</font>c;
<b>}</b>
<b>}</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>error_message <font color='#5555FF'>=</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
buffer[iout] <font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>';
<font color='#0000FF'>else</font>
<b>{</b>
<font color='#0000FF'><u>int</u></font> iin <font color='#5555FF'>=</font> <font color='#979000'>0</font>;
buffer[iout<font color='#5555FF'>+</font><font color='#5555FF'>+</font>] <font color='#5555FF'>=</font> '<font color='#FF0000'>:</font>';
buffer[iout<font color='#5555FF'>+</font><font color='#5555FF'>+</font>] <font color='#5555FF'>=</font> '<font color='#FF0000'> </font>';
<font color='#0000FF'>while</font> <font face='Lucida Console'>(</font>iin <font color='#5555FF'>&lt;</font> PNG_MAX_ERROR_TEXT<font color='#5555FF'>-</font><font color='#979000'>1</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> error_message[iin] <font color='#5555FF'>!</font><font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>'<font face='Lucida Console'>)</font>
buffer[iout<font color='#5555FF'>+</font><font color='#5555FF'>+</font>] <font color='#5555FF'>=</font> error_message[iin<font color='#5555FF'>+</font><font color='#5555FF'>+</font>];
<font color='#009900'>/* iin &lt; PNG_MAX_ERROR_TEXT, so the following is safe: */</font>
buffer[iout] <font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>';
<b>}</b>
<b>}</b>
<font color='#0000FF'>#endif</font> <font color='#009900'>/* PNG_WARNINGS_SUPPORTED || PNG_ERROR_TEXT_SUPPORTED */</font>
<font color='#0000FF'>#if</font> defined<font face='Lucida Console'>(</font>PNG_READ_SUPPORTED<font face='Lucida Console'>)</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> defined<font face='Lucida Console'>(</font>PNG_ERROR_TEXT_SUPPORTED<font face='Lucida Console'>)</font>
<b><a name='PNG_FUNCTION'></a>PNG_FUNCTION</b><font face='Lucida Console'>(</font><font color='#0000FF'><u>void</u></font>,PNGAPI
png_chunk_error,<font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_const_charp error_message<font face='Lucida Console'>)</font>,
PNG_NORETURN<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'><u>char</u></font> msg[<font color='#979000'>18</font><font color='#5555FF'>+</font>PNG_MAX_ERROR_TEXT];
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>=</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<font color='#BB00BB'>png_error</font><font face='Lucida Console'>(</font>png_ptr, error_message<font face='Lucida Console'>)</font>;
<font color='#0000FF'>else</font>
<b>{</b>
<font color='#BB00BB'>png_format_buffer</font><font face='Lucida Console'>(</font>png_ptr, msg, error_message<font face='Lucida Console'>)</font>;
<font color='#BB00BB'>png_error</font><font face='Lucida Console'>(</font>png_ptr, msg<font face='Lucida Console'>)</font>;
<b>}</b>
<b>}</b>
<font color='#0000FF'>#endif</font> <font color='#009900'>/* PNG_READ_SUPPORTED &amp;&amp; PNG_ERROR_TEXT_SUPPORTED */</font>
<font color='#0000FF'>#ifdef</font> PNG_WARNINGS_SUPPORTED
<font color='#0000FF'><u>void</u></font> PNGAPI
<b><a name='png_chunk_warning'></a>png_chunk_warning</b><font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_const_charp warning_message<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'><u>char</u></font> msg[<font color='#979000'>18</font><font color='#5555FF'>+</font>PNG_MAX_ERROR_TEXT];
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>=</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<font color='#BB00BB'>png_warning</font><font face='Lucida Console'>(</font>png_ptr, warning_message<font face='Lucida Console'>)</font>;
<font color='#0000FF'>else</font>
<b>{</b>
<font color='#BB00BB'>png_format_buffer</font><font face='Lucida Console'>(</font>png_ptr, msg, warning_message<font face='Lucida Console'>)</font>;
<font color='#BB00BB'>png_warning</font><font face='Lucida Console'>(</font>png_ptr, msg<font face='Lucida Console'>)</font>;
<b>}</b>
<b>}</b>
<font color='#0000FF'>#endif</font> <font color='#009900'>/* PNG_WARNINGS_SUPPORTED */</font>
<font color='#0000FF'>#ifdef</font> PNG_READ_SUPPORTED
<font color='#0000FF'>#ifdef</font> PNG_BENIGN_ERRORS_SUPPORTED
<font color='#0000FF'><u>void</u></font> PNGAPI
<b><a name='png_chunk_benign_error'></a>png_chunk_benign_error</b><font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_const_charp
error_message<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>flags <font color='#5555FF'>&amp;</font> PNG_FLAG_BENIGN_ERRORS_WARN<font face='Lucida Console'>)</font>
<font color='#BB00BB'>png_chunk_warning</font><font face='Lucida Console'>(</font>png_ptr, error_message<font face='Lucida Console'>)</font>;
<font color='#0000FF'>else</font>
<font color='#BB00BB'>png_chunk_error</font><font face='Lucida Console'>(</font>png_ptr, error_message<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>#endif</font>
<font color='#0000FF'>#endif</font> <font color='#009900'>/* PNG_READ_SUPPORTED */</font>
<font color='#0000FF'><u>void</u></font> <font color='#009900'>/* PRIVATE */</font>
<b><a name='png_chunk_report'></a>png_chunk_report</b><font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_const_charp message, <font color='#0000FF'><u>int</u></font> error<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#009900'>/* This is always supported, but for just read or just write it
* unconditionally does the right thing.
*/</font>
# <font color='#0000FF'>if</font> <font color='#BB00BB'>defined</font><font face='Lucida Console'>(</font>PNG_READ_SUPPORTED<font face='Lucida Console'>)</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> <font color='#BB00BB'>defined</font><font face='Lucida Console'>(</font>PNG_WRITE_SUPPORTED<font face='Lucida Console'>)</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>mode <font color='#5555FF'>&amp;</font> PNG_IS_READ_STRUCT<font face='Lucida Console'>)</font>
# endif
# ifdef PNG_READ_SUPPORTED
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>error <font color='#5555FF'>&lt;</font> PNG_CHUNK_ERROR<font face='Lucida Console'>)</font>
<font color='#BB00BB'>png_chunk_warning</font><font face='Lucida Console'>(</font>png_ptr, message<font face='Lucida Console'>)</font>;
<font color='#0000FF'>else</font>
<font color='#BB00BB'>png_chunk_benign_error</font><font face='Lucida Console'>(</font>png_ptr, message<font face='Lucida Console'>)</font>;
<b>}</b>
# endif
# <font color='#0000FF'>if</font> <font color='#BB00BB'>defined</font><font face='Lucida Console'>(</font>PNG_READ_SUPPORTED<font face='Lucida Console'>)</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> <font color='#BB00BB'>defined</font><font face='Lucida Console'>(</font>PNG_WRITE_SUPPORTED<font face='Lucida Console'>)</font>
<font color='#0000FF'>else</font> <font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font color='#5555FF'>!</font><font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>mode <font color='#5555FF'>&amp;</font> PNG_IS_READ_STRUCT<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>
# endif
# ifdef PNG_WRITE_SUPPORTED
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>error <font color='#5555FF'>&lt;</font> PNG_CHUNK_WRITE_ERROR<font face='Lucida Console'>)</font>
<font color='#BB00BB'>png_app_warning</font><font face='Lucida Console'>(</font>png_ptr, message<font face='Lucida Console'>)</font>;
<font color='#0000FF'>else</font>
<font color='#BB00BB'>png_app_error</font><font face='Lucida Console'>(</font>png_ptr, message<font face='Lucida Console'>)</font>;
<b>}</b>
# endif
<b>}</b>
<font color='#0000FF'>#ifdef</font> PNG_ERROR_TEXT_SUPPORTED
<font color='#0000FF'>#ifdef</font> PNG_FLOATING_POINT_SUPPORTED
<b><a name='PNG_FUNCTION'></a>PNG_FUNCTION</b><font face='Lucida Console'>(</font><font color='#0000FF'><u>void</u></font>,
png_fixed_error,<font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_const_charp name<font face='Lucida Console'>)</font>,PNG_NORETURN<font face='Lucida Console'>)</font>
<b>{</b>
# define fixed_message "<font color='#CC0000'>fixed point overflow in </font>"
# define <font color='#BB00BB'>fixed_message_ln</font> <font face='Lucida Console'>(</font><font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> fixed_message<font face='Lucida Console'>)</font><font color='#5555FF'>-</font><font color='#979000'>1</font><font face='Lucida Console'>)</font>
<font color='#0000FF'><u>int</u></font> iin;
<font color='#0000FF'><u>char</u></font> msg[fixed_message_ln<font color='#5555FF'>+</font>PNG_MAX_ERROR_TEXT];
<font color='#BB00BB'>memcpy</font><font face='Lucida Console'>(</font>msg, fixed_message, fixed_message_ln<font face='Lucida Console'>)</font>;
iin <font color='#5555FF'>=</font> <font color='#979000'>0</font>;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>name <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font> <font color='#0000FF'>while</font> <font face='Lucida Console'>(</font>iin <font color='#5555FF'>&lt;</font> <font face='Lucida Console'>(</font>PNG_MAX_ERROR_TEXT<font color='#5555FF'>-</font><font color='#979000'>1</font><font face='Lucida Console'>)</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> name[iin] <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font>
<b>{</b>
msg[fixed_message_ln <font color='#5555FF'>+</font> iin] <font color='#5555FF'>=</font> name[iin];
<font color='#5555FF'>+</font><font color='#5555FF'>+</font>iin;
<b>}</b>
msg[fixed_message_ln <font color='#5555FF'>+</font> iin] <font color='#5555FF'>=</font> <font color='#979000'>0</font>;
<font color='#BB00BB'>png_error</font><font face='Lucida Console'>(</font>png_ptr, msg<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>#endif</font>
<font color='#0000FF'>#endif</font>
<font color='#0000FF'>#ifdef</font> PNG_SETJMP_SUPPORTED
<font color='#009900'>/* This API only exists if ANSI-C style error handling is used,
* otherwise it is necessary for png_default_error to be overridden.
*/</font>
jmp_buf<font color='#5555FF'>*</font> PNGAPI
<b><a name='png_set_longjmp_fn'></a>png_set_longjmp_fn</b><font face='Lucida Console'>(</font>png_structrp png_ptr, png_longjmp_ptr longjmp_fn,
<font color='#0000FF'><u>size_t</u></font> jmp_buf_size<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#009900'>/* From libpng 1.6.0 the app gets one chance to set a 'jmpbuf_size' value
* and it must not change after that. Libpng doesn't care how big the
* buffer is, just that it doesn't change.
*
* If the buffer size is no *larger* than the size of jmp_buf when libpng is
* compiled a built in jmp_buf is returned; this preserves the pre-1.6.0
* semantics that this call will not fail. If the size is larger, however,
* the buffer is allocated and this may fail, causing the function to return
* NULL.
*/</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>=</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<font color='#0000FF'>return</font> NULL;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_ptr <font color='#5555FF'>=</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<b>{</b>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_size <font color='#5555FF'>=</font> <font color='#979000'>0</font>; <font color='#009900'>/* not allocated */</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>jmp_buf_size <font color='#5555FF'>&lt;</font><font color='#5555FF'>=</font> <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_local<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_ptr <font color='#5555FF'>=</font> <font color='#5555FF'>&amp;</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_local;
<font color='#0000FF'>else</font>
<b>{</b>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_ptr <font color='#5555FF'>=</font> <font color='#BB00BB'>png_voidcast</font><font face='Lucida Console'>(</font>jmp_buf <font color='#5555FF'>*</font>,
<font color='#BB00BB'>png_malloc_warn</font><font face='Lucida Console'>(</font>png_ptr, jmp_buf_size<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_ptr <font color='#5555FF'>=</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<font color='#0000FF'>return</font> NULL; <font color='#009900'>/* new NULL return on OOM */</font>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_size <font color='#5555FF'>=</font> jmp_buf_size;
<b>}</b>
<b>}</b>
<font color='#0000FF'>else</font> <font color='#009900'>/* Already allocated: check the size */</font>
<b>{</b>
<font color='#0000FF'><u>size_t</u></font> size <font color='#5555FF'>=</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_size;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>size <font color='#5555FF'>=</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font>
<b>{</b>
size <font color='#5555FF'>=</font> <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_local<font face='Lucida Console'>)</font>;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_ptr <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#5555FF'>&amp;</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_local<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#009900'>/* This is an internal error in libpng: somehow we have been left
* with a stack allocated jmp_buf when the application regained
* control. It's always possible to fix this up, but for the moment
* this is a png_error because that makes it easy to detect.
*/</font>
<font color='#BB00BB'>png_error</font><font face='Lucida Console'>(</font>png_ptr, "<font color='#CC0000'>Libpng jmp_buf still allocated</font>"<font face='Lucida Console'>)</font>;
<font color='#009900'>/* png_ptr-&gt;jmp_buf_ptr = &amp;png_ptr-&gt;jmp_buf_local; */</font>
<b>}</b>
<b>}</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>size <font color='#5555FF'>!</font><font color='#5555FF'>=</font> jmp_buf_size<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#BB00BB'>png_warning</font><font face='Lucida Console'>(</font>png_ptr, "<font color='#CC0000'>Application jmp_buf size changed</font>"<font face='Lucida Console'>)</font>;
<font color='#0000FF'>return</font> NULL; <font color='#009900'>/* caller will probably crash: no choice here */</font>
<b>}</b>
<b>}</b>
<font color='#009900'>/* Finally fill in the function, now we have a satisfactory buffer. It is
* valid to change the function on every call.
*/</font>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>longjmp_fn <font color='#5555FF'>=</font> longjmp_fn;
<font color='#0000FF'>return</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_ptr;
<b>}</b>
<font color='#0000FF'><u>void</u></font> <font color='#009900'>/* PRIVATE */</font>
<b><a name='png_free_jmpbuf'></a>png_free_jmpbuf</b><font face='Lucida Console'>(</font>png_structrp png_ptr<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<b>{</b>
jmp_buf <font color='#5555FF'>*</font>jb <font color='#5555FF'>=</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_ptr;
<font color='#009900'>/* A size of 0 is used to indicate a local, stack, allocation of the
* pointer; used here and in png.c
*/</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>jb <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_size <font color='#5555FF'>&gt;</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font>
<b>{</b>
<font color='#009900'>/* This stuff is so that a failure to free the error control structure
* does not leave libpng in a state with no valid error handling: the
* free always succeeds, if there is an error it gets ignored.
*/</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>jb <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#5555FF'>&amp;</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_local<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#009900'>/* Make an internal, libpng, jmp_buf to return here */</font>
jmp_buf free_jmp_buf;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font color='#5555FF'>!</font><font color='#BB00BB'>setjmp</font><font face='Lucida Console'>(</font>free_jmp_buf<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>
<b>{</b>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_ptr <font color='#5555FF'>=</font> <font color='#5555FF'>&amp;</font>free_jmp_buf; <font color='#009900'>/* come back here */</font>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_size <font color='#5555FF'>=</font> <font color='#979000'>0</font>; <font color='#009900'>/* stack allocation */</font>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>longjmp_fn <font color='#5555FF'>=</font> longjmp;
<font color='#BB00BB'>png_free</font><font face='Lucida Console'>(</font>png_ptr, jb<font face='Lucida Console'>)</font>; <font color='#009900'>/* Return to setjmp on error */</font>
<b>}</b>
<b>}</b>
<b>}</b>
<font color='#009900'>/* *Always* cancel everything out: */</font>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_size <font color='#5555FF'>=</font> <font color='#979000'>0</font>;
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_ptr <font color='#5555FF'>=</font> NULL;
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>longjmp_fn <font color='#5555FF'>=</font> <font color='#979000'>0</font>;
<b>}</b>
<b>}</b>
<font color='#0000FF'>#endif</font>
<font color='#009900'>/* 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_error_fn().
*/</font>
<font color='#0000FF'>static</font> <b><a name='PNG_FUNCTION'></a>PNG_FUNCTION</b><font face='Lucida Console'>(</font><font color='#0000FF'><u>void</u></font> <font color='#009900'>/* PRIVATE */</font>,
png_default_error,<font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_const_charp error_message<font face='Lucida Console'>)</font>,
PNG_NORETURN<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>#ifdef</font> PNG_CONSOLE_IO_SUPPORTED
<font color='#0000FF'>#ifdef</font> PNG_ERROR_NUMBERS_SUPPORTED
<font color='#009900'>/* Check on NULL only added in 1.5.4 */</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>error_message <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> <font color='#5555FF'>*</font>error_message <font color='#5555FF'>=</font><font color='#5555FF'>=</font> PNG_LITERAL_SHARP<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#009900'>/* Strip "#nnnn " from beginning of error message. */</font>
<font color='#0000FF'><u>int</u></font> offset;
<font color='#0000FF'><u>char</u></font> error_number[<font color='#979000'>16</font>];
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font>offset <font color='#5555FF'>=</font> <font color='#979000'>0</font>; offset<font color='#5555FF'>&lt;</font><font color='#979000'>15</font>; offset<font color='#5555FF'>+</font><font color='#5555FF'>+</font><font face='Lucida Console'>)</font>
<b>{</b>
error_number[offset] <font color='#5555FF'>=</font> error_message[offset <font color='#5555FF'>+</font> <font color='#979000'>1</font>];
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>error_message[offset] <font color='#5555FF'>=</font><font color='#5555FF'>=</font> '<font color='#FF0000'> </font>'<font face='Lucida Console'>)</font>
<font color='#0000FF'>break</font>;
<b>}</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font face='Lucida Console'>(</font>offset <font color='#5555FF'>&gt;</font> <font color='#979000'>1</font><font face='Lucida Console'>)</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> <font face='Lucida Console'>(</font>offset <font color='#5555FF'>&lt;</font> <font color='#979000'>15</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>
<b>{</b>
error_number[offset <font color='#5555FF'>-</font> <font color='#979000'>1</font>] <font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>';
<font color='#BB00BB'>fprintf</font><font face='Lucida Console'>(</font>stderr, "<font color='#CC0000'>libpng error no. %s: %s</font>",
error_number, error_message <font color='#5555FF'>+</font> offset <font color='#5555FF'>+</font> <font color='#979000'>1</font><font face='Lucida Console'>)</font>;
<font color='#BB00BB'>fprintf</font><font face='Lucida Console'>(</font>stderr, PNG_STRING_NEWLINE<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>else</font>
<b>{</b>
<font color='#BB00BB'>fprintf</font><font face='Lucida Console'>(</font>stderr, "<font color='#CC0000'>libpng error: %s, offset=%d</font>",
error_message, offset<font face='Lucida Console'>)</font>;
<font color='#BB00BB'>fprintf</font><font face='Lucida Console'>(</font>stderr, PNG_STRING_NEWLINE<font face='Lucida Console'>)</font>;
<b>}</b>
<b>}</b>
<font color='#0000FF'>else</font>
<font color='#0000FF'>#endif</font>
<b>{</b>
<font color='#BB00BB'>fprintf</font><font face='Lucida Console'>(</font>stderr, "<font color='#CC0000'>libpng error: %s</font>", error_message ? error_message :
"<font color='#CC0000'>undefined</font>"<font face='Lucida Console'>)</font>;
<font color='#BB00BB'>fprintf</font><font face='Lucida Console'>(</font>stderr, PNG_STRING_NEWLINE<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>#else</font>
<font color='#BB00BB'>PNG_UNUSED</font><font face='Lucida Console'>(</font>error_message<font face='Lucida Console'>)</font> <font color='#009900'>/* Make compiler happy */</font>
<font color='#0000FF'>#endif</font>
<font color='#BB00BB'>png_longjmp</font><font face='Lucida Console'>(</font>png_ptr, <font color='#979000'>1</font><font face='Lucida Console'>)</font>;
<b>}</b>
<b><a name='PNG_FUNCTION'></a>PNG_FUNCTION</b><font face='Lucida Console'>(</font><font color='#0000FF'><u>void</u></font>,PNGAPI
png_longjmp,<font face='Lucida Console'>(</font>png_const_structrp png_ptr, <font color='#0000FF'><u>int</u></font> val<font face='Lucida Console'>)</font>,PNG_NORETURN<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>#ifdef</font> PNG_SETJMP_SUPPORTED
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>longjmp_fn <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_ptr<font face='Lucida Console'>)</font>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font><font color='#BB00BB'>longjmp_fn</font><font face='Lucida Console'>(</font><font color='#5555FF'>*</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>jmp_buf_ptr, val<font face='Lucida Console'>)</font>;
<font color='#0000FF'>#endif</font>
<font color='#009900'>/* Here if not setjmp support or if png_ptr is null. */</font>
<font color='#BB00BB'>PNG_ABORT</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>#ifdef</font> PNG_WARNINGS_SUPPORTED
<font color='#009900'>/* This function is called when there is a warning, but the library thinks
* it can continue anyway. Replacement functions don't have to do anything
* here if you don't want them to. In the default configuration, png_ptr is
* not used, but it is passed in case it may be useful.
*/</font>
<font color='#0000FF'>static</font> <font color='#0000FF'><u>void</u></font> <font color='#009900'>/* PRIVATE */</font>
<b><a name='png_default_warning'></a>png_default_warning</b><font face='Lucida Console'>(</font>png_const_structrp png_ptr, png_const_charp warning_message<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>#ifdef</font> PNG_CONSOLE_IO_SUPPORTED
# ifdef PNG_ERROR_NUMBERS_SUPPORTED
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font color='#5555FF'>*</font>warning_message <font color='#5555FF'>=</font><font color='#5555FF'>=</font> PNG_LITERAL_SHARP<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'><u>int</u></font> offset;
<font color='#0000FF'><u>char</u></font> warning_number[<font color='#979000'>16</font>];
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font>offset <font color='#5555FF'>=</font> <font color='#979000'>0</font>; offset <font color='#5555FF'>&lt;</font> <font color='#979000'>15</font>; offset<font color='#5555FF'>+</font><font color='#5555FF'>+</font><font face='Lucida Console'>)</font>
<b>{</b>
warning_number[offset] <font color='#5555FF'>=</font> warning_message[offset <font color='#5555FF'>+</font> <font color='#979000'>1</font>];
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>warning_message[offset] <font color='#5555FF'>=</font><font color='#5555FF'>=</font> '<font color='#FF0000'> </font>'<font face='Lucida Console'>)</font>
<font color='#0000FF'>break</font>;
<b>}</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font face='Lucida Console'>(</font>offset <font color='#5555FF'>&gt;</font> <font color='#979000'>1</font><font face='Lucida Console'>)</font> <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> <font face='Lucida Console'>(</font>offset <font color='#5555FF'>&lt;</font> <font color='#979000'>15</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>
<b>{</b>
warning_number[offset <font color='#5555FF'>+</font> <font color='#979000'>1</font>] <font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>';
<font color='#BB00BB'>fprintf</font><font face='Lucida Console'>(</font>stderr, "<font color='#CC0000'>libpng warning no. %s: %s</font>",
warning_number, warning_message <font color='#5555FF'>+</font> offset<font face='Lucida Console'>)</font>;
<font color='#BB00BB'>fprintf</font><font face='Lucida Console'>(</font>stderr, PNG_STRING_NEWLINE<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>else</font>
<b>{</b>
<font color='#BB00BB'>fprintf</font><font face='Lucida Console'>(</font>stderr, "<font color='#CC0000'>libpng warning: %s</font>",
warning_message<font face='Lucida Console'>)</font>;
<font color='#BB00BB'>fprintf</font><font face='Lucida Console'>(</font>stderr, PNG_STRING_NEWLINE<font face='Lucida Console'>)</font>;
<b>}</b>
<b>}</b>
<font color='#0000FF'>else</font>
# endif
<b>{</b>
<font color='#BB00BB'>fprintf</font><font face='Lucida Console'>(</font>stderr, "<font color='#CC0000'>libpng warning: %s</font>", warning_message<font face='Lucida Console'>)</font>;
<font color='#BB00BB'>fprintf</font><font face='Lucida Console'>(</font>stderr, PNG_STRING_NEWLINE<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>#else</font>
<font color='#BB00BB'>PNG_UNUSED</font><font face='Lucida Console'>(</font>warning_message<font face='Lucida Console'>)</font> <font color='#009900'>/* Make compiler happy */</font>
<font color='#0000FF'>#endif</font>
<font color='#BB00BB'>PNG_UNUSED</font><font face='Lucida Console'>(</font>png_ptr<font face='Lucida Console'>)</font> <font color='#009900'>/* Make compiler happy */</font>
<b>}</b>
<font color='#0000FF'>#endif</font> <font color='#009900'>/* PNG_WARNINGS_SUPPORTED */</font>
<font color='#009900'>/* This function is called when the application wants to use another method
* of handling errors and warnings. Note that the error function MUST NOT
* return to the calling routine or serious problems will occur. The return
* method used in the default routine calls longjmp(png_ptr-&gt;jmp_buf_ptr, 1)
*/</font>
<font color='#0000FF'><u>void</u></font> PNGAPI
<b><a name='png_set_error_fn'></a>png_set_error_fn</b><font face='Lucida Console'>(</font>png_structrp png_ptr, png_voidp error_ptr,
png_error_ptr error_fn, png_error_ptr warning_fn<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>=</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<font color='#0000FF'>return</font>;
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_ptr <font color='#5555FF'>=</font> error_ptr;
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_fn <font color='#5555FF'>=</font> error_fn;
<font color='#0000FF'>#ifdef</font> PNG_WARNINGS_SUPPORTED
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>warning_fn <font color='#5555FF'>=</font> warning_fn;
<font color='#0000FF'>#else</font>
<font color='#BB00BB'>PNG_UNUSED</font><font face='Lucida Console'>(</font>warning_fn<font face='Lucida Console'>)</font>
<font color='#0000FF'>#endif</font>
<b>}</b>
<font color='#009900'>/* This function returns a pointer to the error_ptr associated with the user
* functions. The application should free any memory associated with this
* pointer before png_write_destroy and png_read_destroy are called.
*/</font>
png_voidp PNGAPI
<b><a name='png_get_error_ptr'></a>png_get_error_ptr</b><font face='Lucida Console'>(</font>png_const_structrp png_ptr<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>=</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<font color='#0000FF'>return</font> NULL;
<font color='#0000FF'>return</font> <font face='Lucida Console'>(</font><font face='Lucida Console'>(</font>png_voidp<font face='Lucida Console'>)</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_ptr<font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>#ifdef</font> PNG_ERROR_NUMBERS_SUPPORTED
<font color='#0000FF'><u>void</u></font> PNGAPI
<b><a name='png_set_strip_error_numbers'></a>png_set_strip_error_numbers</b><font face='Lucida Console'>(</font>png_structrp png_ptr, png_uint_32 strip_mode<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>png_ptr <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<b>{</b>
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>flags <font color='#5555FF'>&amp;</font><font color='#5555FF'>=</font>
<font face='Lucida Console'>(</font><font face='Lucida Console'>(</font>~<font face='Lucida Console'>(</font>PNG_FLAG_STRIP_ERROR_NUMBERS <font color='#5555FF'>|</font>
PNG_FLAG_STRIP_ERROR_TEXT<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font><font color='#5555FF'>&amp;</font>strip_mode<font face='Lucida Console'>)</font>;
<b>}</b>
<b>}</b>
<font color='#0000FF'>#endif</font>
<font color='#0000FF'>#if</font> defined<font face='Lucida Console'>(</font>PNG_SIMPLIFIED_READ_SUPPORTED<font face='Lucida Console'>)</font> <font color='#5555FF'>|</font><font color='#5555FF'>|</font>\
<b><a name='defined'></a>defined</b><font face='Lucida Console'>(</font>PNG_SIMPLIFIED_WRITE_SUPPORTED<font face='Lucida Console'>)</font>
<font color='#009900'>/* Currently the above both depend on SETJMP_SUPPORTED, however it would be
* possible to implement without setjmp support just so long as there is some
* way to handle the error return here:
*/</font>
<b><a name='PNG_FUNCTION'></a>PNG_FUNCTION</b><font face='Lucida Console'>(</font><font color='#0000FF'><u>void</u></font> <font color='#009900'>/* PRIVATE */</font>,
png_safe_error,<font face='Lucida Console'>(</font>png_structp png_nonconst_ptr, png_const_charp error_message<font face='Lucida Console'>)</font>,
PNG_NORETURN<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>const</font> png_const_structrp png_ptr <font color='#5555FF'>=</font> png_nonconst_ptr;
png_imagep image <font color='#5555FF'>=</font> <font color='#BB00BB'>png_voidcast</font><font face='Lucida Console'>(</font>png_imagep, png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_ptr<font face='Lucida Console'>)</font>;
<font color='#009900'>/* An error is always logged here, overwriting anything (typically a warning)
* that is already there:
*/</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>image <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#BB00BB'>png_safecat</font><font face='Lucida Console'>(</font>image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>message, <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>message<font face='Lucida Console'>)</font>, <font color='#979000'>0</font>, error_message<font face='Lucida Console'>)</font>;
image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>warning_or_error <font color='#5555FF'>|</font><font color='#5555FF'>=</font> PNG_IMAGE_ERROR;
<font color='#009900'>/* Retrieve the jmp_buf from within the png_control, making this work for
* C++ compilation too is pretty tricky: C++ wants a pointer to the first
* element of a jmp_buf, but C doesn't tell us the type of that.
*/</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>opaque <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL <font color='#5555FF'>&amp;</font><font color='#5555FF'>&amp;</font> image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>opaque<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_buf <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL<font face='Lucida Console'>)</font>
<font color='#BB00BB'>longjmp</font><font face='Lucida Console'>(</font><font color='#BB00BB'>png_control_jmp_buf</font><font face='Lucida Console'>(</font>image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>opaque<font face='Lucida Console'>)</font>, <font color='#979000'>1</font><font face='Lucida Console'>)</font>;
<font color='#009900'>/* Missing longjmp buffer, the following is to help debugging: */</font>
<b>{</b>
<font color='#0000FF'><u>size_t</u></font> pos <font color='#5555FF'>=</font> <font color='#BB00BB'>png_safecat</font><font face='Lucida Console'>(</font>image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>message, <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>message<font face='Lucida Console'>)</font>, <font color='#979000'>0</font>,
"<font color='#CC0000'>bad longjmp: </font>"<font face='Lucida Console'>)</font>;
<font color='#BB00BB'>png_safecat</font><font face='Lucida Console'>(</font>image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>message, <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>message<font face='Lucida Console'>)</font>, pos,
error_message<font face='Lucida Console'>)</font>;
<b>}</b>
<b>}</b>
<font color='#009900'>/* Here on an internal programming error. */</font>
<font color='#BB00BB'>abort</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>;
<b>}</b>
<font color='#0000FF'>#ifdef</font> PNG_WARNINGS_SUPPORTED
<font color='#0000FF'><u>void</u></font> <font color='#009900'>/* PRIVATE */</font>
<b><a name='png_safe_warning'></a>png_safe_warning</b><font face='Lucida Console'>(</font>png_structp png_nonconst_ptr, png_const_charp warning_message<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>const</font> png_const_structrp png_ptr <font color='#5555FF'>=</font> png_nonconst_ptr;
png_imagep image <font color='#5555FF'>=</font> <font color='#BB00BB'>png_voidcast</font><font face='Lucida Console'>(</font>png_imagep, png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_ptr<font face='Lucida Console'>)</font>;
<font color='#009900'>/* A warning is only logged if there is no prior warning or error. */</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>warning_or_error <font color='#5555FF'>=</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font>
<b>{</b>
<font color='#BB00BB'>png_safecat</font><font face='Lucida Console'>(</font>image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>message, <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>message<font face='Lucida Console'>)</font>, <font color='#979000'>0</font>, warning_message<font face='Lucida Console'>)</font>;
image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>warning_or_error <font color='#5555FF'>|</font><font color='#5555FF'>=</font> PNG_IMAGE_WARNING;
<b>}</b>
<b>}</b>
<font color='#0000FF'>#endif</font>
<font color='#0000FF'><u>int</u></font> <font color='#009900'>/* PRIVATE */</font>
<b><a name='png_safe_execute'></a>png_safe_execute</b><font face='Lucida Console'>(</font>png_imagep image_in, <font color='#0000FF'><u>int</u></font> <font face='Lucida Console'>(</font><font color='#5555FF'>*</font>function<font face='Lucida Console'>)</font><font face='Lucida Console'>(</font>png_voidp<font face='Lucida Console'>)</font>, png_voidp arg<font face='Lucida Console'>)</font>
<b>{</b>
<font color='#0000FF'>volatile</font> png_imagep image <font color='#5555FF'>=</font> image_in;
<font color='#0000FF'>volatile</font> <font color='#0000FF'><u>int</u></font> result;
<font color='#0000FF'>volatile</font> png_voidp saved_error_buf;
jmp_buf safe_jmpbuf;
<font color='#009900'>/* Safely execute function(arg) with png_error returning to this function. */</font>
saved_error_buf <font color='#5555FF'>=</font> image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>opaque<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_buf;
result <font color='#5555FF'>=</font> <font color='#BB00BB'>setjmp</font><font face='Lucida Console'>(</font>safe_jmpbuf<font face='Lucida Console'>)</font> <font color='#5555FF'>=</font><font color='#5555FF'>=</font> <font color='#979000'>0</font>;
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>result<font face='Lucida Console'>)</font>
<b>{</b>
image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>opaque<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_buf <font color='#5555FF'>=</font> safe_jmpbuf;
result <font color='#5555FF'>=</font> <font color='#BB00BB'>function</font><font face='Lucida Console'>(</font>arg<font face='Lucida Console'>)</font>;
<b>}</b>
image<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>opaque<font color='#5555FF'>-</font><font color='#5555FF'>&gt;</font>error_buf <font color='#5555FF'>=</font> saved_error_buf;
<font color='#009900'>/* And do the cleanup prior to any failure return. */</font>
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font color='#5555FF'>!</font>result<font face='Lucida Console'>)</font>
<font color='#BB00BB'>png_image_free</font><font face='Lucida Console'>(</font>image<font face='Lucida Console'>)</font>;
<font color='#0000FF'>return</font> result;
<b>}</b>
<font color='#0000FF'>#endif</font> <font color='#009900'>/* SIMPLIFIED READ/WRITE */</font>
<font color='#0000FF'>#endif</font> <font color='#009900'>/* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */</font>
</pre></body></html>