]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commit
Be more type-safe when calling setjmp(); call the same one that libpng would
authorSimon McVittie <smcv@debian.org>
Thu, 7 Jul 2011 17:11:42 +0000 (18:11 +0100)
committernyov <nyov@nexnode.net>
Thu, 27 Nov 2014 10:25:06 +0000 (10:25 +0000)
commit0cc94d58f92a102743cd337893f655628b2f2014
tree4532112abe54a94b5c77211b2bf2aaa6b7e23031
parent2adfb322f4d01eac6b5a5735f15eeafb8135ee03
Be more type-safe when calling setjmp(); call the same one that libpng would

Depending whether _BSD_SOURCE is preferred, glibc will provide one of two
implementations of setjmp()/longjmp() (it either does or doesn't save the
signal mask), acting on different definitions of the jmp_buf struct.

libpng calls longjmp() internally, and expects its callers to call the
version of setjmp() corresponding to the longjmp() call that libpng would
make.

In an attempt to ensure that consistent versions of setjmp() and longjmp()
are used, pngconf.h insists that on Linux, setjmp.h has not already been
included. However, quakedef.h includes that header, leading to some
interesting contortions when using the system libpng.

(IMO the right thing for libpng to do would be for it to provide an exported
function png_setjmp (or something) which calls the version of setjmp() that
libpng expects on the jmp_buf included in the png structure, like qpng_setjmp
in this patch.)

When using the system libpng headers, this patch also avoids the assumption
that jmp_buf is the first thing in the png structure.
image_png.c