From 8c1c8b6c9ffc9aafaf30feb1ff82c7c36232e32a Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Mon, 13 Jan 2020 16:23:58 +0000 Subject: [PATCH] fix a warning from magicksave on some platforms we were leaving delay_gvalue as {0} then unsetting it, which will produce a warning with some versions of glib. Thanks chregu. See https://github.com/libvips/libvips/issues/1524 --- ChangeLog | 1 + libvips/foreign/magick.c | 12 +++++++----- libvips/foreign/magicksave.c | 20 +++++++++++++++----- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index a9016b2d..f34ffc72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ - don't use the new source loaders for new_from_file or new_from_buffer, it will break the loader priority system - fix thumbnail autorot [janko] +- fix a warning with magicksave with no delay array [chregu] 20/6/19 started 8.9.0 - add vips_image_get/set_array_int() diff --git a/libvips/foreign/magick.c b/libvips/foreign/magick.c index 806233c9..1df52924 100644 --- a/libvips/foreign/magick.c +++ b/libvips/foreign/magick.c @@ -214,13 +214,14 @@ magick_optimize_image_layers( Image **images, ExceptionInfo *exception ) { Image *tmp; - tmp = OptimizePlusImageLayers(*images, exception ); + tmp = OptimizePlusImageLayers( *images, exception ); - if ( exception->severity != UndefinedException ) + if( exception->severity != UndefinedException ) { + VIPS_FREEF( DestroyImageList, tmp ); return MagickFalse; + } VIPS_FREEF( DestroyImageList, *images ); - *images = tmp; return MagickTrue; @@ -230,8 +231,9 @@ int magick_optimize_image_transparency( const Image *images, ExceptionInfo *exception ) { - OptimizeImageTransparency(images, exception); - return ( exception->severity == UndefinedException ); + OptimizeImageTransparency( images, exception ); + + return( exception->severity == UndefinedException ); } /* Does a few bytes look like a file IM can handle? diff --git a/libvips/foreign/magicksave.c b/libvips/foreign/magicksave.c index f808c732..10086d61 100644 --- a/libvips/foreign/magicksave.c +++ b/libvips/foreign/magicksave.c @@ -367,6 +367,7 @@ vips_foreign_save_magick_build( VipsObject *object ) * need it. */ if( vips_image_get_typeof( im, "delay" ) ) { + g_value_unset( &magick->delay_gvalue ); if( vips_image_get( im, "delay", &magick->delay_gvalue ) ) return( -1 ); magick->delays = vips_value_get_array_int( @@ -378,8 +379,10 @@ vips_foreign_save_magick_build( VipsObject *object ) return( -1 ); if( magick->optimize_gif_frames ) { - if( !magick_optimize_image_layers(&magick->images, magick->exception ) ) { - magick_inherit_exception( magick->exception, magick->images ); + if( !magick_optimize_image_layers( &magick->images, + magick->exception ) ) { + magick_inherit_exception( magick->exception, + magick->images ); magick_vips_error( class->nickname, magick->exception ); return( -1 ); @@ -387,8 +390,10 @@ vips_foreign_save_magick_build( VipsObject *object ) } if( magick->optimize_gif_transparency ) { - if( !magick_optimize_image_transparency(magick->images, magick->exception) ) { - magick_inherit_exception( magick->exception, magick->images ); + if( !magick_optimize_image_transparency( magick->images, + magick->exception ) ) { + magick_inherit_exception( magick->exception, + magick->images ); magick_vips_error( class->nickname, magick->exception ); return( -1 ); @@ -470,13 +475,18 @@ vips_foreign_save_magick_class_init( VipsForeignSaveMagickClass *class ) _( "Optimize_gif_transparency" ), _( "Apply GIF transparency optimization" ), VIPS_ARGUMENT_OPTIONAL_INPUT, - G_STRUCT_OFFSET( VipsForeignSaveMagick, optimize_gif_transparency ), + G_STRUCT_OFFSET( VipsForeignSaveMagick, + optimize_gif_transparency ), FALSE ); } static void vips_foreign_save_magick_init( VipsForeignSaveMagick *magick ) { + /* Init to an int just to have something there. It is swapped for an + * int array later. + */ + g_value_init( &magick->delay_gvalue, G_TYPE_INT ); } typedef struct _VipsForeignSaveMagickFile {