diff options
Diffstat (limited to 'testing/wine/libpng14.patch')
-rw-r--r-- | testing/wine/libpng14.patch | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/testing/wine/libpng14.patch b/testing/wine/libpng14.patch new file mode 100644 index 000000000..14f6ddc07 --- /dev/null +++ b/testing/wine/libpng14.patch @@ -0,0 +1,76 @@ +diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c +index e14fe81..62165f6 100644 +--- a/programs/winemenubuilder/winemenubuilder.c ++++ b/programs/winemenubuilder/winemenubuilder.c +@@ -188,8 +188,10 @@ static void *libpng_handle; + MAKE_FUNCPTR(png_create_info_struct); + MAKE_FUNCPTR(png_create_write_struct); + MAKE_FUNCPTR(png_destroy_write_struct); ++MAKE_FUNCPTR(png_get_error_ptr); + MAKE_FUNCPTR(png_init_io); + MAKE_FUNCPTR(png_set_bgr); ++MAKE_FUNCPTR(png_set_error_fn); + MAKE_FUNCPTR(png_set_text); + MAKE_FUNCPTR(png_set_IHDR); + MAKE_FUNCPTR(png_write_end); +@@ -209,8 +211,10 @@ static void *load_libpng(void) + LOAD_FUNCPTR(png_create_info_struct); + LOAD_FUNCPTR(png_create_write_struct); + LOAD_FUNCPTR(png_destroy_write_struct); ++ LOAD_FUNCPTR(png_get_error_ptr); + LOAD_FUNCPTR(png_init_io); + LOAD_FUNCPTR(png_set_bgr); ++ LOAD_FUNCPTR(png_set_error_fn); + LOAD_FUNCPTR(png_set_IHDR); + LOAD_FUNCPTR(png_set_text); + LOAD_FUNCPTR(png_write_end); +@@ -221,6 +225,23 @@ static void *load_libpng(void) + return libpng_handle; + } + ++static void user_error_fn(png_structp png_ptr, png_const_charp error_message) ++{ ++ jmp_buf *pjmpbuf; ++ ++ /* This uses setjmp/longjmp just like the default. We can't use the ++ * default because there's no way to access the jmp buffer in the png_struct ++ * that works in 1.2 and 1.4 and allows us to dynamically load libpng. */ ++ WINE_ERR("PNG error: %s\n", wine_dbgstr_an(error_message, -1)); ++ pjmpbuf = ppng_get_error_ptr(png_ptr); ++ longjmp(*pjmpbuf, 1); ++} ++ ++static void user_warning_fn(png_structp png_ptr, png_const_charp warning_message) ++{ ++ WINE_WARN("PNG warning: %s\n", wine_dbgstr_an(warning_message, -1)); ++} ++ + static BOOL SaveIconResAsPNG(const BITMAPINFO *pIcon, const char *png_filename, LPCWSTR commentW) + { + static const char comment_key[] = "Created from"; +@@ -234,6 +255,7 @@ static BOOL SaveIconResAsPNG(const BITMAPINFO *pIcon, const char *png_filename, + int nWidth = pIcon->bmiHeader.biWidth; + int nHeight = pIcon->bmiHeader.biHeight; + int nBpp = pIcon->bmiHeader.biBitCount; ++ jmp_buf jmpbuf; + + switch (nBpp) + { +@@ -306,12 +328,12 @@ static BOOL SaveIconResAsPNG(const BITMAPINFO *pIcon, const char *png_filename, + !(info_ptr = ppng_create_info_struct(png_ptr))) + goto error; + +- if (setjmp(png_jmpbuf(png_ptr))) ++ if (setjmp(jmpbuf)) + { + /* All future errors jump here */ +- WINE_ERR("png error\n"); + goto error; + } ++ ppng_set_error_fn(png_ptr, &jmpbuf, user_error_fn, user_warning_fn); + + ppng_init_io(png_ptr, fp); + ppng_set_IHDR(png_ptr, info_ptr, nWidth, nHeight, 8, +-- +1.6.3.3 + |