MagickCore  6.9.12-67
Convert, Edit, Or Compose Bitmap Images
 All Data Structures
static.c
1 /*
2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 % %
4 % %
5 % %
6 % SSSSS TTTTT AAA TTTTT IIIII CCCC %
7 % SS T A A T I C %
8 % SSS T AAAAA T I C %
9 % SS T A A T I C %
10 % SSSSS T A A T IIIII CCCC %
11 % %
12 % %
13 % MagickCore Static Methods %
14 % %
15 % Software Design %
16 % Cristy %
17 % March 2000 %
18 % %
19 % %
20 % Copyright 1999-2021 ImageMagick Studio LLC, a non-profit organization %
21 % dedicated to making software imaging solutions freely available. %
22 % %
23 % You may not use this file except in compliance with the License. You may %
24 % obtain a copy of the License at %
25 % %
26 % https://imagemagick.org/script/license.php %
27 % %
28 % Unless required by applicable law or agreed to in writing, software %
29 % distributed under the License is distributed on an "AS IS" BASIS, %
30 % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
31 % See the License for the specific language governing permissions and %
32 % limitations under the License. %
33 % %
34 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35 %
36 %
37 %
38 */
39 
40 /*
41  Include declarations.
42 */
43 #include "magick/studio.h"
44 #include "magick/coder.h"
45 #include "magick/exception-private.h"
46 #include "magick/image.h"
47 #include "magick/module.h"
48 #include "magick/policy.h"
49 #include "magick/static.h"
50 #include "magick/string_.h"
51 
52 /*
53  ImageMagick module stub.
54 */
55 ModuleExport size_t RegisterUndefinedImage(void)
56 {
57  return(MagickImageCoderSignature);
58 }
59 
60 ModuleExport void UnregisterUndefinedImage(void)
61 {
62 }
63 
64 /*
65  ImageMagick modules.
66 */
67 static struct
68 {
69  const char
70  *module;
71 
72  MagickBooleanType
73  registered;
74 
75  size_t
76  (*register_module)(void);
77 
78  void
79  (*unregister_module)(void);
80 } MagickModules[] =
81 {
82 #if !defined(MAGICKCORE_BUILD_MODULES)
83  { "AAI", MagickFalse, RegisterAAIImage, UnregisterAAIImage },
84  { "ART", MagickFalse, RegisterARTImage, UnregisterARTImage },
85  { "AVS", MagickFalse, RegisterAVSImage, UnregisterAVSImage },
86  { "BGR", MagickFalse, RegisterBGRImage, UnregisterBGRImage },
87  { "BMP", MagickFalse, RegisterBMPImage, UnregisterBMPImage },
88  { "BRAILLE", MagickFalse, RegisterBRAILLEImage, UnregisterBRAILLEImage },
89  { "CALS", MagickFalse, RegisterCALSImage, UnregisterCALSImage },
90  { "CAPTION", MagickFalse, RegisterCAPTIONImage, UnregisterCAPTIONImage },
91  { "CIN", MagickFalse, RegisterCINImage, UnregisterCINImage },
92  { "CIP", MagickFalse, RegisterCIPImage, UnregisterCIPImage },
93  { "CLIP", MagickFalse, RegisterCLIPImage, UnregisterCLIPImage },
94 #if defined(MAGICKCORE_WINGDI32_DELEGATE)
95  { "CLIPBOARD", MagickFalse, RegisterCLIPBOARDImage, UnregisterCLIPBOARDImage },
96 #endif
97  { "CMYK", MagickFalse, RegisterCMYKImage, UnregisterCMYKImage },
98  { "CUT", MagickFalse, RegisterCUTImage, UnregisterCUTImage },
99  { "DCM", MagickFalse, RegisterDCMImage, UnregisterDCMImage },
100  { "DDS", MagickFalse, RegisterDDSImage, UnregisterDDSImage },
101  { "DEBUG", MagickFalse, RegisterDEBUGImage, UnregisterDEBUGImage },
102  { "DIB", MagickFalse, RegisterDIBImage, UnregisterDIBImage },
103 #if defined(MAGICKCORE_DJVU_DELEGATE)
104  { "DJVU", MagickFalse, RegisterDJVUImage, UnregisterDJVUImage },
105 #endif
106  { "DNG", MagickFalse, RegisterDNGImage, UnregisterDNGImage },
107 #if defined(MAGICKCORE_DPS_DELEGATE)
108  { "DPS", MagickFalse, RegisterDPSImage, UnregisterDPSImage },
109 #endif
110  { "DPX", MagickFalse, RegisterDPXImage, UnregisterDPXImage },
111 #if defined(MAGICKCORE_WINGDI32_DELEGATE)
112  { "EMF", MagickFalse, RegisterEMFImage, UnregisterEMFImage },
113 #endif
114 #if defined(MAGICKCORE_TIFF_DELEGATE)
115  { "EPT", MagickFalse, RegisterEPTImage, UnregisterEPTImage },
116 #endif
117 #if defined(MAGICKCORE_OPENEXR_DELEGATE)
118  { "EXR", MagickFalse, RegisterEXRImage, UnregisterEXRImage },
119 #endif
120  { "FAX", MagickFalse, RegisterFAXImage, UnregisterFAXImage },
121  { "FITS", MagickFalse, RegisterFITSImage, UnregisterFITSImage },
122 #if defined(MAGICKCORE_FLIF_DELEGATE)
123  { "FLIF", MagickFalse, RegisterFLIFImage, UnregisterFLIFImage },
124 #endif
125 #if defined(MAGICKCORE_FPX_DELEGATE)
126  { "FPX", MagickFalse, RegisterFPXImage, UnregisterFPXImage },
127 #endif
128  { "GIF", MagickFalse, RegisterGIFImage, UnregisterGIFImage },
129  { "GRAY", MagickFalse, RegisterGRAYImage, UnregisterGRAYImage },
130  { "GRADIENT", MagickFalse, RegisterGRADIENTImage, UnregisterGRADIENTImage },
131  { "HALD", MagickFalse, RegisterHALDImage, UnregisterHALDImage },
132  { "HDR", MagickFalse, RegisterHDRImage, UnregisterHDRImage },
133 #if defined(MAGICKCORE_HEIC_DELEGATE)
134  { "HEIC", MagickFalse, RegisterHEICImage, UnregisterHEICImage },
135 #endif
136  { "HISTOGRAM", MagickFalse, RegisterHISTOGRAMImage, UnregisterHISTOGRAMImage },
137  { "HRZ", MagickFalse, RegisterHRZImage, UnregisterHRZImage },
138  { "HTML", MagickFalse, RegisterHTMLImage, UnregisterHTMLImage },
139  { "ICON", MagickFalse, RegisterICONImage, UnregisterICONImage },
140  { "INFO", MagickFalse, RegisterINFOImage, UnregisterINFOImage },
141  { "INLINE", MagickFalse, RegisterINLINEImage, UnregisterINLINEImage },
142  { "IPL", MagickFalse, RegisterIPLImage, UnregisterIPLImage },
143 #if defined(MAGICKCORE_JBIG_DELEGATE)
144  { "JBIG", MagickFalse, RegisterJBIGImage, UnregisterJBIGImage },
145 #endif
146  { "JNX", MagickFalse, RegisterJNXImage, UnregisterJNXImage },
147 #if defined(MAGICKCORE_JPEG_DELEGATE)
148  { "JPEG", MagickFalse, RegisterJPEGImage, UnregisterJPEGImage },
149 #endif
150 #if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
151  { "JP2", MagickFalse, RegisterJP2Image, UnregisterJP2Image },
152 #endif
153  { "JSON", MagickFalse, RegisterJSONImage, UnregisterJSONImage },
154  { "LABEL", MagickFalse, RegisterLABELImage, UnregisterLABELImage },
155  { "MAC", MagickFalse, RegisterMACImage, UnregisterMACImage },
156  { "MAGICK", MagickFalse, RegisterMAGICKImage, UnregisterMAGICKImage },
157  { "MAP", MagickFalse, RegisterMAPImage, UnregisterMAPImage },
158  { "MAT", MagickFalse, RegisterMATImage, UnregisterMATImage },
159  { "MATTE", MagickFalse, RegisterMATTEImage, UnregisterMATTEImage },
160  { "MASK", MagickFalse, RegisterMASKImage, UnregisterMASKImage },
161  { "META", MagickFalse, RegisterMETAImage, UnregisterMETAImage },
162  { "MIFF", MagickFalse, RegisterMIFFImage, UnregisterMIFFImage },
163  { "MONO", MagickFalse, RegisterMONOImage, UnregisterMONOImage },
164  { "MPC", MagickFalse, RegisterMPCImage, UnregisterMPCImage },
165  { "MPR", MagickFalse, RegisterMPRImage, UnregisterMPRImage },
166  { "MSL", MagickFalse, RegisterMSLImage, UnregisterMSLImage },
167  { "MTV", MagickFalse, RegisterMTVImage, UnregisterMTVImage },
168  { "MVG", MagickFalse, RegisterMVGImage, UnregisterMVGImage },
169  { "NULL", MagickFalse, RegisterNULLImage, UnregisterNULLImage },
170  { "OTB", MagickFalse, RegisterOTBImage, UnregisterOTBImage },
171  { "PALM", MagickFalse, RegisterPALMImage, UnregisterPALMImage },
172  { "PANGO", MagickFalse, RegisterPANGOImage, UnregisterPANGOImage },
173  { "PATTERN", MagickFalse, RegisterPATTERNImage, UnregisterPATTERNImage },
174  { "PCD", MagickFalse, RegisterPCDImage, UnregisterPCDImage },
175  { "PCL", MagickFalse, RegisterPCLImage, UnregisterPCLImage },
176  { "PCX", MagickFalse, RegisterPCXImage, UnregisterPCXImage },
177  { "PDB", MagickFalse, RegisterPDBImage, UnregisterPDBImage },
178  { "PDF", MagickFalse, RegisterPDFImage, UnregisterPDFImage },
179  { "PES", MagickFalse, RegisterPESImage, UnregisterPESImage },
180  { "PGX", MagickFalse, RegisterPGXImage, UnregisterPGXImage },
181  { "PICT", MagickFalse, RegisterPICTImage, UnregisterPICTImage },
182  { "PIX", MagickFalse, RegisterPIXImage, UnregisterPIXImage },
183  { "PLASMA", MagickFalse, RegisterPLASMAImage, UnregisterPLASMAImage },
184 #if defined(MAGICKCORE_PNG_DELEGATE)
185  { "PNG", MagickFalse, RegisterPNGImage, UnregisterPNGImage },
186 #endif
187  { "PNM", MagickFalse, RegisterPNMImage, UnregisterPNMImage },
188  { "PS", MagickFalse, RegisterPSImage, UnregisterPSImage },
189  { "PS2", MagickFalse, RegisterPS2Image, UnregisterPS2Image },
190  { "PS3", MagickFalse, RegisterPS3Image, UnregisterPS3Image },
191  { "PSD", MagickFalse, RegisterPSDImage, UnregisterPSDImage },
192  { "PWP", MagickFalse, RegisterPWPImage, UnregisterPWPImage },
193  { "RAW", MagickFalse, RegisterRAWImage, UnregisterRAWImage },
194  { "RGB", MagickFalse, RegisterRGBImage, UnregisterRGBImage },
195  { "RGF", MagickFalse, RegisterRGFImage, UnregisterRGFImage },
196  { "RLA", MagickFalse, RegisterRLAImage, UnregisterRLAImage },
197  { "RLE", MagickFalse, RegisterRLEImage, UnregisterRLEImage },
198  { "SCR", MagickFalse, RegisterSCRImage, UnregisterSCRImage },
199  { "SCREENSHOT", MagickFalse, RegisterSCREENSHOTImage, UnregisterSCREENSHOTImage },
200  { "SCT", MagickFalse, RegisterSCTImage, UnregisterSCTImage },
201  { "SFW", MagickFalse, RegisterSFWImage, UnregisterSFWImage },
202  { "SGI", MagickFalse, RegisterSGIImage, UnregisterSGIImage },
203  { "SIXEL", MagickFalse, RegisterSIXELImage, UnregisterSIXELImage },
204  { "STEGANO", MagickFalse, RegisterSTEGANOImage, UnregisterSTEGANOImage },
205  { "SUN", MagickFalse, RegisterSUNImage, UnregisterSUNImage },
206  { "SVG", MagickFalse, RegisterSVGImage, UnregisterSVGImage },
207  { "TGA", MagickFalse, RegisterTGAImage, UnregisterTGAImage },
208  { "THUMBNAIL", MagickFalse, RegisterTHUMBNAILImage, UnregisterTHUMBNAILImage },
209 #if defined(MAGICKCORE_TIFF_DELEGATE)
210  { "TIFF", MagickFalse, RegisterTIFFImage, UnregisterTIFFImage },
211 #endif
212  { "TILE", MagickFalse, RegisterTILEImage, UnregisterTILEImage },
213  { "TIM", MagickFalse, RegisterTIMImage, UnregisterTIMImage },
214  { "TTF", MagickFalse, RegisterTTFImage, UnregisterTTFImage },
215  { "TXT", MagickFalse, RegisterTXTImage, UnregisterTXTImage },
216  { "UIL", MagickFalse, RegisterUILImage, UnregisterUILImage },
217  { "URL", MagickFalse, RegisterURLImage, UnregisterURLImage },
218  { "UYVY", MagickFalse, RegisterUYVYImage, UnregisterUYVYImage },
219  { "VICAR", MagickFalse, RegisterVICARImage, UnregisterVICARImage },
220  { "VID", MagickFalse, RegisterVIDImage, UnregisterVIDImage },
221  { "VIDEO", MagickFalse, RegisterVIDEOImage, UnregisterVIDEOImage },
222  { "VIFF", MagickFalse, RegisterVIFFImage, UnregisterVIFFImage },
223  { "VIPS", MagickFalse, RegisterVIPSImage, UnregisterVIPSImage },
224  { "WBMP", MagickFalse, RegisterWBMPImage, UnregisterWBMPImage },
225 #if defined(MAGICKCORE_WEBP_DELEGATE)
226  { "WEBP", MagickFalse, RegisterWEBPImage, UnregisterWEBPImage },
227 #endif
228 #if defined(MAGICKCORE_WMF_DELEGATE) || defined(MAGICKCORE_WMFLITE_DELEGATE)
229  { "WMF", MagickFalse, RegisterWMFImage, UnregisterWMFImage },
230 #endif
231  { "WPG", MagickFalse, RegisterWPGImage, UnregisterWPGImage },
232 #if defined(MAGICKCORE_X11_DELEGATE)
233  { "X", MagickFalse, RegisterXImage, UnregisterXImage },
234 #endif
235  { "XBM", MagickFalse, RegisterXBMImage, UnregisterXBMImage },
236  { "XC", MagickFalse, RegisterXCImage, UnregisterXCImage },
237  { "XCF", MagickFalse, RegisterXCFImage, UnregisterXCFImage },
238  { "XPM", MagickFalse, RegisterXPMImage, UnregisterXPMImage },
239  { "XPS", MagickFalse, RegisterXPSImage, UnregisterXPSImage },
240 #if defined(MAGICKCORE_X11_DELEGATE)
241  { "XWD", MagickFalse, RegisterXWDImage, UnregisterXWDImage },
242 #endif
243  { "YCBCR", MagickFalse, RegisterYCBCRImage, UnregisterYCBCRImage },
244  { "YUV", MagickFalse, RegisterYUVImage, UnregisterYUVImage },
245 #endif
246  { (const char *) NULL, MagickFalse, RegisterUndefinedImage, UnregisterUndefinedImage }
247 };
248 
249 /*
250 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
251 % %
252 % %
253 % %
254 % I n v o k e S t a t i c I m a g e F i l t e r %
255 % %
256 % %
257 % %
258 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
259 %
260 % InvokeStaticImageFilter() invokes a static image filter.
261 %
262 % The format of the InvokeStaticImageFilter method is:
263 %
264 % MagickBooleanType InvokeStaticImageFilter(const char *tag,Image **image,
265 % const int argc,const char **argv)
266 %
267 % A description of each parameter follows:
268 %
269 % o tag: the module tag.
270 %
271 % o image: the image.
272 %
273 % o argc: the number of elements in the argument vector.
274 %
275 % o argv: A text array containing the command line arguments.
276 %
277 % o argv: A text array containing the command line arguments.
278 %
279 % o exception: return any errors or warnings in this structure.
280 %
281 */
282 #if defined(MAGICKCORE_MODULES_SUPPORT)
283 MagickExport MagickBooleanType InvokeStaticImageFilter(const char *tag,
284  Image **image,const int argc,const char **argv,ExceptionInfo *exception)
285 {
286  PolicyRights
287  rights;
288 
289  assert(image != (Image **) NULL);
290  assert((*image)->signature == MagickCoreSignature);
291  if (IsEventLogging() != MagickFalse)
292  (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",(*image)->filename);
293  rights=ReadPolicyRights;
294  if (IsRightsAuthorized(FilterPolicyDomain,rights,tag) == MagickFalse)
295  {
296  errno=EPERM;
297  (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
298  "NotAuthorized","`%s'",tag);
299  return(MagickFalse);
300  }
301 #if defined(MAGICKCORE_MODULES_SUPPORT)
302  (void) tag;
303  (void) argc;
304  (void) argv;
305  (void) exception;
306 #else
307  {
308  extern size_t
309  analyzeImage(Image **,const int,char **,ExceptionInfo *);
310 
311  ImageFilterHandler
312  *image_filter;
313 
314  image_filter=(ImageFilterHandler *) NULL;
315  if (LocaleCompare("analyze",tag) == 0)
316  image_filter=(ImageFilterHandler *) analyzeImage;
317  if (image_filter == (ImageFilterHandler *) NULL)
318  (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
319  "UnableToLoadModule","`%s'",tag);
320  else
321  {
322  size_t
323  signature;
324 
325  if ((*image)->debug != MagickFalse)
326  (void) LogMagickEvent(TransformEvent,GetMagickModule(),
327  "Invoking \"%s\" static image filter",tag);
328  signature=image_filter(image,argc,argv,exception);
329  if ((*image)->debug != MagickFalse)
330  (void) LogMagickEvent(TransformEvent,GetMagickModule(),
331  "\"%s\" completes",tag);
332  if (signature != MagickImageFilterSignature)
333  {
334  (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
335  "ImageFilterSignatureMismatch","'%s': %8lx != %8lx",tag,
336  (unsigned long) signature,(unsigned long)
337  MagickImageFilterSignature);
338  return(MagickFalse);
339  }
340  }
341  }
342 #endif
343  return(MagickTrue);
344 }
345 #endif
346 
347 /*
348 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
349 % %
350 % %
351 % %
352 % R e g i s t e r S t a t i c M o d u l e %
353 % %
354 % %
355 % %
356 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
357 %
358 % RegisterStaticModule() statically registers a module.
359 %
360 % The format of the RegisterStaticModule method is:
361 %
362 % MagickBooleanType RegisterStaticModule(const char module,
363 % ExceptionInfo *exception)
364 %
365 % A description of each parameter follows:
366 %
367 % o module: the want to register.
368 %
369 % o exception: return any errors or warnings in this structure.
370 %
371 */
372 MagickExport MagickBooleanType RegisterStaticModule(const char *module,
373  ExceptionInfo *exception)
374 {
375  char
376  module_name[MagickPathExtent];
377 
378  PolicyRights
379  rights;
380 
381  const CoderInfo
382  *p;
383 
384  size_t
385  extent;
386 
387  ssize_t
388  i;
389 
390  /*
391  Assign module name from alias.
392  */
393  assert(module != (const char *) NULL);
394  (void) CopyMagickString(module_name,module,MagickPathExtent);
395  p=GetCoderInfo(module,exception);
396  if (p != (CoderInfo *) NULL)
397  (void) CopyMagickString(module_name,p->name,MagickPathExtent);
398  rights=(PolicyRights) (ReadPolicyRights | WritePolicyRights);
399  if (IsRightsAuthorized(ModulePolicyDomain,rights,module_name) == MagickFalse)
400  {
401  errno=EPERM;
402  (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
403  "NotAuthorized","`%s'",module);
404  return(MagickFalse);
405  }
406  extent=sizeof(MagickModules)/sizeof(MagickModules[0]);
407  for (i=0; i < (ssize_t) extent; i++)
408  if (LocaleCompare(MagickModules[i].module,module_name) == 0)
409  {
410  if (MagickModules[i].registered == MagickFalse)
411  {
412  (void) (MagickModules[i].register_module)();
413  MagickModules[i].registered=MagickTrue;
414  }
415  return(MagickTrue);
416  }
417  return(MagickFalse);
418 }
419 
420 /*
421 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
422 % %
423 % %
424 % %
425 % R e g i s t e r S t a t i c M o d u l e s %
426 % %
427 % %
428 % %
429 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
430 %
431 % RegisterStaticModules() statically registers all the available module
432 % handlers.
433 %
434 % The format of the RegisterStaticModules method is:
435 %
436 % (void) RegisterStaticModules(void)
437 %
438 */
439 MagickExport void RegisterStaticModules(void)
440 {
441  PolicyRights
442  rights;
443 
444  size_t
445  extent;
446 
447  ssize_t
448  i;
449 
450  rights=(PolicyRights) (ReadPolicyRights | WritePolicyRights);
451  extent=sizeof(MagickModules)/sizeof(MagickModules[0]);
452  for (i=0; i < (ssize_t) extent; i++)
453  {
454  if (MagickModules[i].registered == MagickFalse)
455  {
456  if (IsRightsAuthorized(ModulePolicyDomain,rights,MagickModules[i].module) == MagickFalse)
457  continue;
458  (void) (MagickModules[i].register_module)();
459  MagickModules[i].registered=MagickTrue;
460  }
461  }
462 }
463 
464 /*
465 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
466 % %
467 % %
468 % %
469 % U n r e g i s t e r S t a t i c M o d u l e %
470 % %
471 % %
472 % %
473 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
474 %
475 % UnregisterStaticModule() statically unregisters the named module.
476 %
477 % The format of the UnregisterStaticModule method is:
478 %
479 % MagickBooleanType UnregisterStaticModule(const char *module)
480 %
481 % A description of each parameter follows:
482 %
483 % o module: the module we want to unregister.
484 %
485 */
486 MagickExport MagickBooleanType UnregisterStaticModule(const char *module)
487 {
488  size_t
489  extent;
490 
491  ssize_t
492  i;
493 
494  extent=sizeof(MagickModules)/sizeof(MagickModules[0]);
495  for (i=0; i < (ssize_t) extent; i++)
496  if (LocaleCompare(MagickModules[i].module,module) == 0)
497  {
498  if (MagickModules[i].registered != MagickFalse)
499  {
500  (MagickModules[i].unregister_module)();
501  MagickModules[i].registered=MagickFalse;
502  }
503  return(MagickTrue);
504  }
505  return(MagickFalse);
506 }
507 
508 /*
509 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
510 % %
511 % %
512 % %
513 % U n r e g i s t e r S t a t i c M o d u l e s %
514 % %
515 % %
516 % %
517 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
518 %
519 % UnregisterStaticModules() statically unregisters all the available module
520 % handlers.
521 %
522 % The format of the UnregisterStaticModules method is:
523 %
524 % UnregisterStaticModules(void)
525 %
526 */
527 MagickExport void UnregisterStaticModules(void)
528 {
529  size_t
530  extent;
531 
532  ssize_t
533  i;
534 
535  extent=sizeof(MagickModules)/sizeof(MagickModules[0]);
536  for (i=0; i < (ssize_t) extent; i++)
537  {
538  if (MagickModules[i].registered != MagickFalse)
539  {
540  (MagickModules[i].unregister_module)();
541  MagickModules[i].registered=MagickFalse;
542  }
543  }
544 }
Definition: image.h:152