static void (*qpng_write_info) (void*, void*);
static void (*qpng_write_row) (void*, unsigned char*);
static void (*qpng_write_end) (void*, void*);
+static void* (*qpng_jmpbuf) (void*);
static dllfunction_t pngfuncs[] =
{
{"png_write_info", (void **) &qpng_write_info},
{"png_write_row", (void **) &qpng_write_row},
{"png_write_end", (void **) &qpng_write_end},
+ {"png_jmpbuf", (void **) &qpng_jmpbuf},
{NULL, NULL}
};
const char* dllnames [] =
{
#if WIN32
+ "libpng15-15.dll",
+ "libpng15.dll",
"libpng14-14.dll",
"libpng14.dll",
"libpng12.dll",
#elif defined(MACOSX)
+ "libpng15.15.dylib",
"libpng14.14.dylib",
"libpng12.0.dylib",
#else
+ "libpng15.so.15", // WTF libtool guidelines anyone?
"libpng14.so.14", // WTF libtool guidelines anyone?
"libpng12.so.0",
"libpng.so", // FreeBSD
#define PNG_LIBPNG_VER_STRING_12 "1.2.4"
#define PNG_LIBPNG_VER_STRING_14 "1.4.0"
+#define PNG_LIBPNG_VER_STRING_15 "1.5.0"
#define PNG_COLOR_MASK_PALETTE 1
#define PNG_COLOR_MASK_COLOR 2
if(qpng_sig_cmp(raw, 0, filesize))
return NULL;
png = (void *)qpng_create_read_struct(
- (qpng_access_version_number() / 100 == 102) ? PNG_LIBPNG_VER_STRING_12 : PNG_LIBPNG_VER_STRING_14, // nasty hack to support both libpng12 and libpng14
+ (qpng_access_version_number() / 100 == 102) ? PNG_LIBPNG_VER_STRING_12 :
+ (qpng_access_version_number() / 100 == 104) ? PNG_LIBPNG_VER_STRING_14 :
+ PNG_LIBPNG_VER_STRING_15, // nasty hack... whatever
0, PNG_error_fn, PNG_warning_fn
);
if(!png)
// NOTE: this relies on jmp_buf being the first thing in the png structure
// created by libpng! (this is correct for libpng 1.2.x)
-#ifdef __cplusplus
-#ifdef WIN64
- if (setjmp((_JBTYPE *)png))
-#elif defined(MACOSX) || defined(WIN32)
- if (setjmp((int *)png))
-#else
- if (setjmp((__jmp_buf_tag *)png))
-#endif
-#else
- if (setjmp(png))
-#endif
+ if (setjmp(qpng_jmpbuf(png)))
{
if (my_png.Data)
Mem_Free(my_png.Data);