From ca89a9b7eb6aa39690eb97b8a4711eb7ed03ce3d Mon Sep 17 00:00:00 2001 From: dirk Date: Sun, 22 Feb 2015 01:19:21 +0000 Subject: [PATCH] Improved reporting of the format by also using the extension when possible and added option to prevent this behavior. --- MagickCore/image.c | 18 +++++++++++++++--- MagickCore/magick.c | 35 ++++++++++++++++++++++++++++++++++- MagickCore/magick.h | 4 +++- coders/jpeg.c | 4 ++++ 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/MagickCore/image.c b/MagickCore/image.c index c136943a2..8e1ad6a94 100644 --- a/MagickCore/image.c +++ b/MagickCore/image.c @@ -2630,9 +2630,21 @@ MagickExport MagickBooleanType SetImageInfo(ImageInfo *image_info, if ((magic_info != (const MagicInfo *) NULL) && (GetMagicName(magic_info) != (char *) NULL)) { - (void) CopyMagickString(image_info->magick,GetMagicName(magic_info), - MaxTextExtent); - magick_info=GetMagickInfo(image_info->magick,sans_exception); + /* + Try to use magick_info that was determined earlier by the extension + */ + if ((magick_info != (const MagickInfo *) NULL) && + (GetMagickUseExtension(magick_info) != MagickFalse) && + (LocaleCompare(magick_info->module,GetMagicName( + magic_info)) == 0)) + (void) CopyMagickString(image_info->magick,magick_info->name, + MaxTextExtent); + else + { + (void) CopyMagickString(image_info->magick,GetMagicName( + magic_info),MaxTextExtent); + magick_info=GetMagickInfo(image_info->magick,sans_exception); + } if ((magick_info == (const MagickInfo *) NULL) || (GetMagickEndianSupport(magick_info) == MagickFalse)) image_info->endian=UndefinedEndian; diff --git a/MagickCore/magick.c b/MagickCore/magick.c index 744215072..884ccc080 100644 --- a/MagickCore/magick.c +++ b/MagickCore/magick.c @@ -848,6 +848,39 @@ MagickExport MagickBooleanType GetMagickStealth(const MagickInfo *magick_info) assert(magick_info->signature == MagickSignature); return(((magick_info->flags & Stealth) == 0) ? MagickFalse : MagickTrue); } + +/* +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% % +% % ++ G e t M a g i c k U s e E x t e n s i o n % +% % +% % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% GetMagickUseExtension() returns MagickTrue if the magick can use the +% extension of the format if the format return by IsImageFormatHandler uses +% the same coder. +% +% The format of the GetMagickUseExtension method is: +% +% MagickBooleanType GetMagickUseExtension(const MagickInfo *magick_info) +% +% A description of each parameter follows: +% +% o magick_info: The magick info. +% +*/ +MagickExport MagickBooleanType GetMagickUseExtension( + const MagickInfo *magick_info) +{ + assert(magick_info != (MagickInfo *) NULL); + assert(magick_info->signature == MagickSignature); + return(((magick_info->flags & UseExtension) == 0) ? MagickFalse : + MagickTrue); +} /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -1558,7 +1591,7 @@ MagickExport MagickInfo *SetMagickInfo(const char *name) (void) ResetMagickMemory(magick_info,0,sizeof(*magick_info)); magick_info->name=ConstantString(name); magick_info->flags=Adjoin | BlobSupport | DecoderThreadSupport | - EncoderThreadSupport; + EncoderThreadSupport | UseExtension; magick_info->signature=MagickSignature; return(magick_info); } diff --git a/MagickCore/magick.h b/MagickCore/magick.h index a0b1012ed..d0c9e47f1 100644 --- a/MagickCore/magick.h +++ b/MagickCore/magick.h @@ -42,7 +42,8 @@ typedef enum EndianSupport = 0x0010, RawSupport = 0x0020, SeekableStream = 0x0040, - Stealth = 0x0080 + Stealth = 0x0080, + UseExtension = 0x0100 } MagickFlagType; typedef Image @@ -119,6 +120,7 @@ extern MagickExport MagickBooleanType GetMagickRawSupport(const MagickInfo *), GetMagickSeekableStream(const MagickInfo *), GetMagickStealth(const MagickInfo *), + GetMagickUseExtension(const MagickInfo *), IsMagickCoreInstantiated(void), UnregisterMagickInfo(const char *); diff --git a/coders/jpeg.c b/coders/jpeg.c index 5005aa1a0..3d856130d 100644 --- a/coders/jpeg.c +++ b/coders/jpeg.c @@ -1536,6 +1536,7 @@ ModuleExport size_t RegisterJPEGImage(void) #endif entry->magick=(IsImageFormatHandler *) IsJPEG; entry->flags^=Adjoin; + entry->flags^=UseExtension; entry->description=ConstantString(description); if (*version != '\0') entry->version=ConstantString(version); @@ -1567,6 +1568,7 @@ ModuleExport size_t RegisterJPEGImage(void) entry->encoder=(EncodeImageHandler *) WriteJPEGImage; #endif entry->flags^=Adjoin; + entry->flags^=UseExtension; entry->description=ConstantString(description); if (*version != '\0') entry->version=ConstantString(version); @@ -1582,6 +1584,7 @@ ModuleExport size_t RegisterJPEGImage(void) entry->encoder=(EncodeImageHandler *) WriteJPEGImage; #endif entry->flags^=Adjoin; + entry->flags^=UseExtension; entry->description=ConstantString(description); if (*version != '\0') entry->version=ConstantString(version); @@ -1597,6 +1600,7 @@ ModuleExport size_t RegisterJPEGImage(void) entry->encoder=(EncodeImageHandler *) WriteJPEGImage; #endif entry->flags^=Adjoin; + entry->flags^=UseExtension; entry->description=ConstantString(description); if (*version != '\0') entry->version=ConstantString(version); -- 2.40.0