To be honest I don't understand what is the problem, I just see that png.h is able to make longjmp disappear, but siglongjmp is still around...
Nothing disappears. It's a problem which was discussed here some time ago, how compiler interprets #defines within #defines (right, very scientific description). Your problem is this line (png.h:970):
�
# �define png_jmpbuf(png_ptr) \
�� � �(*png_set_longjmp_fn((png_ptr), longjmp, sizeof (jmp_buf)))
This macro (png_jmpbuf) is used in pngread.c:90:
if (setjmp(png_jmpbuf(png_ptr)))
and guess what, longjmp isn't expanded (even if known to compiler!). It even doesn't help if you do something like this:
#define longjmp(__jb,__v) � � � (siglongjmp(__jb, __v))
# �define png_jmpbuf(png_ptr) \
�� � �(*png_set_longjmp_fn((png_ptr),�longjmp, sizeof (jmp_buf)))
Don't ask me why, to me it looks stupid but probably it has some reason. So this is why siglongjmp worked for you -- macro is then expanded correctly. Question is how to fix this.
Btw, <setjmp.h> (better said, features.h which is #included there) #defines __USE_BSD but does NOT define __STRICT_ANSI.
--