X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=inline;f=source%2Fgraphics%2Fimage_png.cpp;h=f2247863dac57d8f2636af3eaadeb5dc4a8f6edd;hb=afbc75845b7e88ae7311a0fb0065c6f0ca13eb2e;hp=256159c6880fc1de70ab563f6c702ab24301cca3;hpb=cc728fda1325c5358f3ec177d31621b5688371fe;p=libs%2Fgui.git diff --git a/source/graphics/image_png.cpp b/source/graphics/image_png.cpp index 256159c..f224786 100644 --- a/source/graphics/image_png.cpp +++ b/source/graphics/image_png.cpp @@ -3,14 +3,28 @@ #include "image_png.h" #include "image_private.h" +using namespace std; + namespace { +struct ErrorInfo +{ + string msg; +}; + void read(png_struct *png, png_byte *data, png_size_t size) { Msp::IO::Base *in = reinterpret_cast(png_get_io_ptr(png)); in->read(reinterpret_cast(data), size); } +void error(png_struct *png, const char *msg) +{ + ErrorInfo *error_info = reinterpret_cast(png_get_error_ptr(png)); + error_info->msg = msg; + longjmp(png_jmpbuf(png), 1); +} + } @@ -30,11 +44,12 @@ void load_png(IO::Base &in, Image::Private &priv) try { - png = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0); + ErrorInfo error_info; + png = png_create_read_struct(PNG_LIBPNG_VER_STRING, &error_info, error, 0); info = png_create_info_struct(png); if(setjmp(png_jmpbuf(png))) - throw bad_image_data("PNG error"); + throw bad_image_data(error_info.msg); png_set_read_fn(png, &in, read); png_read_info(png, info);