mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-21 18:23:59 +00:00
Fix png support to allow compiling with libpng-1.5 (Bug#7908).
* image.c (fn_png_longjmp, fn_png_set_longjmp_fn): New png function definitions for compiling with libpng-1.5. (PNG_LONGJMP, PNG_JMPBUF): New macros for libpng-1.5. (my_png_error, png_load): Use them. Suggested by Thomas Klausner.
This commit is contained in:
parent
e935c6a287
commit
7f9c5df966
@ -1,3 +1,11 @@
|
||||
2011-01-29 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* image.c (fn_png_longjmp, fn_png_set_longjmp_fn): New png
|
||||
function definitions for compiling with libpng-1.5.
|
||||
(PNG_LONGJMP, PNG_JMPBUF): New macros for libpng-1.5.
|
||||
(my_png_error, png_load): Use them. Suggested by Thomas Klausner
|
||||
(Bug#7908).
|
||||
|
||||
2011-01-28 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* m/intel386.h: Define NO_ARG_ARRAY. Suggested by Dan Nicolaescu.
|
||||
|
34
src/image.c
34
src/image.c
@ -5590,6 +5590,11 @@ DEF_IMGLIB_FN (png_read_image);
|
||||
DEF_IMGLIB_FN (png_read_end);
|
||||
DEF_IMGLIB_FN (png_error);
|
||||
|
||||
#if (PNG_LIBPNG_VER >= 10500)
|
||||
DEF_IMGLIB_FN (png_longjmp);
|
||||
DEF_IMGLIB_FN (png_set_longjmp_fn);
|
||||
#endif /* libpng version >= 1.5 */
|
||||
|
||||
static int
|
||||
init_png_functions (Lisp_Object libraries)
|
||||
{
|
||||
@ -5620,6 +5625,12 @@ init_png_functions (Lisp_Object libraries)
|
||||
LOAD_IMGLIB_FN (library, png_read_image);
|
||||
LOAD_IMGLIB_FN (library, png_read_end);
|
||||
LOAD_IMGLIB_FN (library, png_error);
|
||||
|
||||
#if (PNG_LIBPNG_VER >= 10500)
|
||||
LOAD_IMGLIB_FN (library, png_longjmp);
|
||||
LOAD_IMGLIB_FN (library, png_set_longjmp_fn);
|
||||
#endif /* libpng version >= 1.5 */
|
||||
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
@ -5646,8 +5657,27 @@ init_png_functions (Lisp_Object libraries)
|
||||
#define fn_png_read_end png_read_end
|
||||
#define fn_png_error png_error
|
||||
|
||||
#if (PNG_LIBPNG_VER >= 10500)
|
||||
#define fn_png_longjmp png_longjmp
|
||||
#define fn_png_set_longjmp_fn png_set_longjmp_fn
|
||||
#endif /* libpng version >= 1.5 */
|
||||
|
||||
#endif /* HAVE_NTGUI */
|
||||
|
||||
|
||||
#if (PNG_LIBPNG_VER < 10500)
|
||||
#define PNG_LONGJMP(ptr) (longjmp (ptr->jmpbuf, 1))
|
||||
#define PNG_JMPBUF(ptr) ((ptr)->jmpbuf)
|
||||
#else
|
||||
/* In libpng version 1.5, the jmpbuf member is hidden.
|
||||
We need the extra cast for PNG_JMPBUF because, for Windows,
|
||||
DEF_IMGLIB_FN defines the return value of fn_png_set_longjmp_fn to
|
||||
be int (Bug#7908). */
|
||||
#define PNG_LONGJMP(ptr) (fn_png_longjmp (png_ptr, 1))
|
||||
#define PNG_JMPBUF(ptr) \
|
||||
(*(jmp_buf *)(fn_png_set_longjmp_fn((ptr), longjmp, sizeof (jmp_buf))))
|
||||
#endif
|
||||
|
||||
/* Error and warning handlers installed when the PNG library
|
||||
is initialized. */
|
||||
|
||||
@ -5660,7 +5690,7 @@ my_png_error (png_ptr, msg)
|
||||
/* Avoid compiler warning about deprecated direct access to
|
||||
png_ptr's fields in libpng versions 1.4.x. */
|
||||
image_error ("PNG error: %s", build_string (msg), Qnil);
|
||||
longjmp (png_ptr->jmpbuf, 1);
|
||||
PNG_LONGJMP (png_ptr);
|
||||
}
|
||||
|
||||
|
||||
@ -5836,7 +5866,7 @@ png_load (f, img)
|
||||
|
||||
/* Set error jump-back. We come back here when the PNG library
|
||||
detects an error. */
|
||||
if (setjmp (png_ptr->jmpbuf))
|
||||
if (setjmp (PNG_JMPBUF (png_ptr)))
|
||||
{
|
||||
error:
|
||||
if (png_ptr)
|
||||
|
Loading…
Reference in New Issue
Block a user