X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Fpngsize.c;h=6e55238461ef6d6250a4a026820d24f58ab5db0e;hp=ed3666a31526ba82f1ea561c403c566b665ed7cc;hb=75b8cf7a1eff3d24a8567f3209aa023ad4473e95;hpb=35f5945e114df7324be00de01bcde77e096a2373 diff --git a/src/pngsize.c b/src/pngsize.c index ed3666a..6e55238 100644 --- a/src/pngsize.c +++ b/src/pngsize.c @@ -1,5 +1,5 @@ /***************************************************************************** - * RRDtool 1.2.0 Copyright by Tobi Oetiker, 1997-2005 + * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008 ***************************************************************************** * pngsize.c determine the size of a PNG image *****************************************************************************/ @@ -7,37 +7,50 @@ #include #include "rrd_tool.h" -int -PngSize(FILE *fd, long *width, long *height) +int PngSize( + FILE * fd, + long *width, + long *height) { - png_structp png_read_ptr = - png_create_read_struct(PNG_LIBPNG_VER_STRING, - (png_voidp)NULL, - /* we would need to point to error handlers - here to do it properly */ - (png_error_ptr)NULL, (png_error_ptr)NULL); - - png_infop info_ptr = png_create_info_struct(png_read_ptr); - - (*width)=0; - (*height)=0; - - if (setjmp(png_read_ptr->jmpbuf)){ - png_destroy_read_struct(&png_read_ptr, &info_ptr, (png_infopp)NULL); - return 0; - } - - png_init_io(png_read_ptr,fd); - png_read_info(png_read_ptr, info_ptr); - (*width)=png_get_image_width(png_read_ptr, info_ptr); - (*height)=png_get_image_height(png_read_ptr, info_ptr); - - png_destroy_read_struct(&png_read_ptr, &info_ptr, NULL); - if (*width >0 && *height >0) - return 1; - else - return 0; + png_structp png_read_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, + (png_voidp) NULL, + /* we would need to point to error handlers + here to do it properly */ + (png_error_ptr) NULL, + (png_error_ptr) NULL); + + png_infop info_ptr = png_create_info_struct(png_read_ptr); + + (*width) = 0; + (*height) = 0; + +/* this is to make compile on aix work since they seem to define jmpbuf + to be _jmpbuf which breaks compilation */ + +#ifndef png_jmpbuf +#ifdef PNG_SETJMP_SUPPORTED +# define png_jmpbuf(png_ptr) ((png_ptr)->PNG_jmpbuf) +#else +#ifdef jmpbuf +#undef jmpbuf +#endif +# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) +#endif +#endif + + if (setjmp(png_jmpbuf(png_read_ptr))) { + png_destroy_read_struct(&png_read_ptr, &info_ptr, (png_infopp) NULL); + return 0; + } + + png_init_io(png_read_ptr, fd); + png_read_info(png_read_ptr, info_ptr); + (*width) = png_get_image_width(png_read_ptr, info_ptr); + (*height) = png_get_image_height(png_read_ptr, info_ptr); + + png_destroy_read_struct(&png_read_ptr, &info_ptr, NULL); + if (*width > 0 && *height > 0) + return 1; + else + return 0; } - - -