43#include "MagickCore/studio.h"
44#include "MagickCore/coder.h"
45#include "MagickCore/exception-private.h"
46#include "MagickCore/image.h"
47#include "MagickCore/module.h"
48#include "MagickCore/policy.h"
49#include "MagickCore/static.h"
50#include "MagickCore/string_.h"
51#include "coders/coders.h"
56#define AddMagickCoder(coder) { #coder, MagickFalse, \
57 Register ## coder ## Image, Unregister ## coder ## Image },
62ModuleExport
size_t RegisterUndefinedImage(
void)
64 return(MagickImageCoderSignature);
67ModuleExport
void UnregisterUndefinedImage(
void)
83 (*register_module)(void);
86 (*unregister_module)(void);
88#if !defined(MAGICKCORE_BUILD_MODULES)
89 #include "coders/coders-list.h"
91 { (
const char *) NULL, MagickFalse, RegisterUndefinedImage, UnregisterUndefinedImage }
127#if defined(MAGICKCORE_MODULES_SUPPORT)
128MagickExport MagickBooleanType InvokeStaticImageFilter(
const char *tag,
129 Image **image,
const int argc,
const char **argv,ExceptionInfo *exception)
134 assert(image != (Image **) NULL);
135 assert((*image)->signature == MagickCoreSignature);
136 if (IsEventLogging() != MagickFalse)
137 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",(*image)->filename);
138 rights=ReadPolicyRights;
139 if (IsRightsAuthorized(FilterPolicyDomain,rights,tag) == MagickFalse)
140 ThrowPolicyException(tag,MagickFalse);
141#if defined(MAGICKCORE_MODULES_SUPPORT)
149 analyzeImage(Image **,
const int,
char **,ExceptionInfo *);
154 image_filter=(ImageFilterHandler *) NULL;
155 if (LocaleCompare(
"analyze",tag) == 0)
156 image_filter=(ImageFilterHandler *) analyzeImage;
157 if (image_filter == (ImageFilterHandler *) NULL)
158 (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
159 "UnableToLoadModule",
"`%s'",tag);
165 if ((*image)->debug != MagickFalse)
166 (void) LogMagickEvent(TransformEvent,GetMagickModule(),
167 "Invoking \"%s\" static image filter",tag);
168 signature=image_filter(image,argc,argv,exception);
169 if ((*image)->debug != MagickFalse)
170 (void) LogMagickEvent(TransformEvent,GetMagickModule(),
171 "\"%s\" completes",tag);
172 if (signature != MagickImageFilterSignature)
174 (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
175 "ImageFilterSignatureMismatch",
"'%s': %8lx != %8lx",tag,
176 (
unsigned long) signature,(
unsigned long)
177 MagickImageFilterSignature);
212MagickExport MagickBooleanType RegisterStaticModule(
const char *module,
213 ExceptionInfo *exception)
216 module_name[MagickPathExtent];
233 assert(module != (
const char *) NULL);
234 (void) CopyMagickString(module_name,module,MagickPathExtent);
235 p=GetCoderInfo(module,exception);
236 if (p != (CoderInfo *) NULL)
237 (void) CopyMagickString(module_name,p->name,MagickPathExtent);
238 rights=(PolicyRights) (ReadPolicyRights | WritePolicyRights);
239 if (IsRightsAuthorized(ModulePolicyDomain,rights,module_name) == MagickFalse)
240 ThrowPolicyException(module_name,MagickFalse);
241 extent=
sizeof(MagickModules)/
sizeof(MagickModules[0]);
242 for (i=0; i < (ssize_t) extent; i++)
243 if (LocaleCompare(MagickModules[i].module,module_name) == 0)
245 if (MagickModules[i].registered == MagickFalse)
247 (void) (MagickModules[i].register_module)();
248 MagickModules[i].registered=MagickTrue;
274MagickExport
void RegisterStaticModules(
void)
285 rights=(PolicyRights) (ReadPolicyRights | WritePolicyRights);
286 extent=
sizeof(MagickModules)/
sizeof(MagickModules[0]);
287 for (i=0; i < (ssize_t) extent; i++)
289 if (MagickModules[i].registered == MagickFalse)
291 if (IsRightsAuthorized(ModulePolicyDomain,rights,MagickModules[i].module) == MagickFalse)
293 (void) (MagickModules[i].register_module)();
294 MagickModules[i].registered=MagickTrue;
321MagickExport MagickBooleanType UnregisterStaticModule(
const char *module)
329 extent=
sizeof(MagickModules)/
sizeof(MagickModules[0]);
330 for (i=0; i < (ssize_t) extent; i++)
331 if (LocaleCompare(MagickModules[i].module,module) == 0)
333 if (MagickModules[i].registered != MagickFalse)
335 (MagickModules[i].unregister_module)();
336 MagickModules[i].registered=MagickFalse;
362MagickExport
void UnregisterStaticModules(
void)
370 extent=
sizeof(MagickModules)/
sizeof(MagickModules[0]);
371 for (i=0; i < (ssize_t) extent; i++)
373 if (MagickModules[i].registered != MagickFalse)
375 (MagickModules[i].unregister_module)();
376 MagickModules[i].registered=MagickFalse;