|
<html><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'>></font>flags<font color='#5555FF'>&</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'><</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'>></font>flags<font color='#5555FF'>&</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'><</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'>></font>flags<font color='#5555FF'>&</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'>&</font><font color='#5555FF'>&</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></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'>&</font><font color='#5555FF'>&</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></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'>&</font><font color='#5555FF'>&</font> pos <font color='#5555FF'><</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'>&</font><font color='#5555FF'>&</font> pos <font color='#5555FF'><</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'>></font> start <font color='#5555FF'>&</font><font color='#5555FF'>&</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'><</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'>&</font> <font color='#979000'>0xf</font>]; |
|
number <font color='#5555FF'>></font><font color='#5555FF'>></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'>></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'>></font>flags<font color='#5555FF'>&</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'><</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'>&</font><font color='#5555FF'>&</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></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 @<number>, 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'>></font> <font color='#979000'>0</font> <font color='#5555FF'>&</font><font color='#5555FF'>&</font> number <font color='#5555FF'><</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'><</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'><</font> <font color='#979000'>0</font> <font color='#5555FF'>&</font><font color='#5555FF'>&</font> str <font color='#5555FF'>></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'><</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'>&</font><font color='#5555FF'>&</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'>&</font><font color='#5555FF'>&</font> <font color='#5555FF'>*</font>message <font color='#5555FF'>=</font><font color='#5555FF'>=</font> '<font color='#FF0000'>@</font>' <font color='#5555FF'>&</font><font color='#5555FF'>&</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'>&</font><font color='#5555FF'>&</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'><</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'><</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'>&</font><font color='#5555FF'>&</font> <font color='#5555FF'>*</font>parm <font color='#5555FF'>!</font><font color='#5555FF'>=</font> '<font color='#FF0000'>\0</font>' <font color='#5555FF'>&</font><font color='#5555FF'>&</font> parm <font color='#5555FF'><</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'>></font>flags <font color='#5555FF'>&</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'>></font>mode <font color='#5555FF'>&</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'>&</font><font color='#5555FF'>&</font> |
|
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></font>mode <font color='#5555FF'>&</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'>&</font><font color='#5555FF'>&</font> |
|
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></font>flags <font color='#5555FF'>&</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'>></font>flags <font color='#5555FF'>&</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->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'><</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'>></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'>></font> <font color='#979000'>90</font> <font color='#5555FF'>&</font><font color='#5555FF'>&</font> <font face='Lucida Console'>(</font>c<font face='Lucida Console'>)</font> <font color='#5555FF'><</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'>></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'>></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'>></font><font color='#5555FF'>></font> ishift<font face='Lucida Console'>)</font> <font color='#5555FF'>&</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'>&</font> <font color='#979000'>0xf0</font><font face='Lucida Console'>)</font> <font color='#5555FF'>></font><font color='#5555FF'>></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'>&</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'><</font> PNG_MAX_ERROR_TEXT<font color='#5555FF'>-</font><font color='#979000'>1</font> <font color='#5555FF'>&</font><font color='#5555FF'>&</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 < 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'>&</font><font color='#5555FF'>&</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 && 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'>></font>flags <font color='#5555FF'>&</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'>&</font><font color='#5555FF'>&</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'>></font>mode <font color='#5555FF'>&</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'><</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'>&</font><font color='#5555FF'>&</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'>></font>mode <font color='#5555FF'>&</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'><</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'><</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'>&</font><font color='#5555FF'>&</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'>></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'>></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'><</font><font color='#5555FF'>=</font> <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></font>jmp_buf_local<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font> |
|
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></font>jmp_buf_ptr <font color='#5555FF'>=</font> <font color='#5555FF'>&</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></font>jmp_buf_local; |
|
|
|
<font color='#0000FF'>else</font> |
|
<b>{</b> |
|
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></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'>></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'>></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'>></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'>></font>jmp_buf_ptr <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#5555FF'>&</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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->jmp_buf_ptr = &png_ptr->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'>></font>longjmp_fn <font color='#5555FF'>=</font> longjmp_fn; |
|
<font color='#0000FF'>return</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></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'>&</font><font color='#5555FF'>&</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></font>jmp_buf_size <font color='#5555FF'>></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'>&</font>png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></font>jmp_buf_ptr <font color='#5555FF'>=</font> <font color='#5555FF'>&</font>free_jmp_buf; <font color='#009900'>/* come back here */</font> |
|
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></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'>></font>jmp_buf_size <font color='#5555FF'>=</font> <font color='#979000'>0</font>; |
|
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></font>jmp_buf_ptr <font color='#5555FF'>=</font> NULL; |
|
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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'>&</font><font color='#5555FF'>&</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'><</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'>></font> <font color='#979000'>1</font><font face='Lucida Console'>)</font> <font color='#5555FF'>&</font><font color='#5555FF'>&</font> <font face='Lucida Console'>(</font>offset <font color='#5555FF'><</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'>&</font><font color='#5555FF'>&</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></font>longjmp_fn <font color='#5555FF'>&</font><font color='#5555FF'>&</font> png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></font>jmp_buf_ptr<font face='Lucida Console'>)</font> |
|
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></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'><</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'>></font> <font color='#979000'>1</font><font face='Lucida Console'>)</font> <font color='#5555FF'>&</font><font color='#5555FF'>&</font> <font face='Lucida Console'>(</font>offset <font color='#5555FF'><</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->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'>></font>error_ptr <font color='#5555FF'>=</font> error_ptr; |
|
png_ptr<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></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'>></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'>></font>flags <font color='#5555FF'>&</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'>&</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'>></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'>></font>message, <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> image<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></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'>></font>opaque <font color='#5555FF'>!</font><font color='#5555FF'>=</font> NULL <font color='#5555FF'>&</font><font color='#5555FF'>&</font> image<font color='#5555FF'>-</font><font color='#5555FF'>></font>opaque<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></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'>></font>message, <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> image<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></font>message, <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> image<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></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'>></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'>></font>message, <font face='Lucida Console'>(</font><font color='#0000FF'>sizeof</font> image<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></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'>></font>opaque<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></font>opaque<font color='#5555FF'>-</font><font color='#5555FF'>></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'>></font>opaque<font color='#5555FF'>-</font><font color='#5555FF'>></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> |