/src/graphicsmagick/magick/static.c
Line | Count | Source |
1 | | /* |
2 | | % Copyright (C) 2003-2024 GraphicsMagick Group |
3 | | % Copyright (C) 2002 ImageMagick Studio |
4 | | % SPDX-License-Identifier: MIT |
5 | | % |
6 | | % This program is covered by multiple licenses, which are described in |
7 | | % Copyright.txt. You should have received a copy of Copyright.txt with this |
8 | | % package; otherwise see http://www.graphicsmagick.org/www/Copyright.html. |
9 | | % |
10 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
11 | | % % |
12 | | % % |
13 | | % % |
14 | | % SSSSS TTTTT AAA TTTTT IIIII CCCC % |
15 | | % SS T A A T I C % |
16 | | % SSS T AAAAA T I C % |
17 | | % SS T A A T I C % |
18 | | % SSSSS T A A T IIIII CCCC % |
19 | | % % |
20 | | % % |
21 | | % GraphicsMagick Static Methods % |
22 | | % % |
23 | | % % |
24 | | % Software Design % |
25 | | % John Cristy % |
26 | | % March 2000 % |
27 | | % % |
28 | | % % |
29 | | % % |
30 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
31 | | % |
32 | | % |
33 | | % |
34 | | */ |
35 | | |
36 | | /* |
37 | | Include declarations. |
38 | | */ |
39 | | #include "magick/studio.h" |
40 | | #include "magick/log.h" |
41 | | #include "magick/module.h" |
42 | | #include "magick/static.h" |
43 | | #include "magick/utility.h" |
44 | | |
45 | | #if !defined(SupportMagickModules) |
46 | | |
47 | | #include "magick/module_aliases.h" |
48 | | |
49 | | /* |
50 | | This list must be ordered by 'name' in an ascending order based on |
51 | | strcmp(). This list will always be initialized data due to function |
52 | | address resolution. |
53 | | */ |
54 | | static const struct |
55 | | { |
56 | | const char *name; |
57 | | void (*register_fn)(void); |
58 | | void (*unregister_fn)(void); |
59 | | const unsigned char name_length; |
60 | | |
61 | | } StaticModules[] = |
62 | | { |
63 | | #define STATICM(name,register_fn,unregister_fn) {name,register_fn,unregister_fn,sizeof(name)-1} |
64 | | STATICM("AAI",RegisterAAIImage,UnregisterAAIImage), |
65 | | STATICM("ART",RegisterARTImage,UnregisterARTImage), |
66 | | STATICM("AVS",RegisterAVSImage,UnregisterAVSImage), |
67 | | STATICM("BMP",RegisterBMPImage,UnregisterBMPImage), |
68 | | STATICM("BRAILLE",RegisterBRAILLEImage,UnregisterBRAILLEImage), |
69 | | STATICM("CALS",RegisterCALSImage,UnregisterCALSImage), |
70 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
71 | | STATICM("CAPTION",RegisterCAPTIONImage,UnregisterCAPTIONImage), |
72 | | #endif |
73 | | STATICM("CINEON",RegisterCINEONImage,UnregisterCINEONImage), |
74 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
75 | | # if defined(HasWINGDI32) |
76 | | STATICM("CLIPBOARD",RegisterCLIPBOARDImage,UnregisterCLIPBOARDImage), |
77 | | # endif |
78 | | STATICM("CMYK",RegisterCMYKImage,UnregisterCMYKImage), |
79 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
80 | | STATICM("CUT",RegisterCUTImage,UnregisterCUTImage), |
81 | | STATICM("DCM",RegisterDCMImage,UnregisterDCMImage), |
82 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
83 | | STATICM("DCRAW",RegisterDCRAWImage,UnregisterDCRAWImage), |
84 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
85 | | STATICM("DIB",RegisterDIBImage,UnregisterDIBImage), |
86 | | STATICM("DPX",RegisterDPXImage,UnregisterDPXImage), |
87 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
88 | | # if defined(HasWINGDI32) |
89 | | STATICM("EMF",RegisterEMFImage,UnregisterEMFImage), |
90 | | # endif |
91 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
92 | | #if defined(HasTIFF) |
93 | | STATICM("EPT",RegisterEPTImage,UnregisterEPTImage), |
94 | | #endif |
95 | | STATICM("FAX",RegisterFAXImage,UnregisterFAXImage), |
96 | | STATICM("FITS",RegisterFITSImage,UnregisterFITSImage), |
97 | | #if defined(HasFPX) |
98 | | STATICM("FPX",RegisterFPXImage,UnregisterFPXImage), |
99 | | #endif |
100 | | STATICM("GIF",RegisterGIFImage,UnregisterGIFImage), |
101 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
102 | | STATICM("GRAY",RegisterGRAYImage,UnregisterGRAYImage), |
103 | | STATICM("GRADIENT",RegisterGRADIENTImage,UnregisterGRADIENTImage), |
104 | | STATICM("HISTOGRAM",RegisterHISTOGRAMImage,UnregisterHISTOGRAMImage), |
105 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
106 | | STATICM("HRZ",RegisterHRZImage,UnregisterHRZImage), |
107 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
108 | | STATICM("HTML",RegisterHTMLImage,UnregisterHTMLImage), |
109 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
110 | | #if defined(HasHEIF) |
111 | | STATICM("HEIF",RegisterHEIFImage,UnregisterHEIFImage), |
112 | | #endif |
113 | | STATICM("ICON",RegisterICONImage,UnregisterICONImage), |
114 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
115 | | STATICM("IDENTITY",RegisterIDENTITYImage,UnregisterIDENTITYImage), |
116 | | STATICM("INFO",RegisterINFOImage,UnregisterINFOImage), |
117 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
118 | | #if defined(HasJBIG) |
119 | | STATICM("JBIG",RegisterJBIGImage,UnregisterJBIGImage), |
120 | | #endif |
121 | | #if defined(HasJPEG) |
122 | | STATICM("JNX",RegisterJNXImage,UnregisterJNXImage), |
123 | | #endif |
124 | | #if defined(HasJPEG) |
125 | | STATICM("JPEG",RegisterJPEGImage,UnregisterJPEGImage), |
126 | | #endif |
127 | | #if defined(HasJP2) |
128 | | STATICM("JP2",RegisterJP2Image,UnregisterJP2Image), |
129 | | #endif |
130 | | #if defined(HasJXL) |
131 | | STATICM("JXL",RegisterJXLImage,UnregisterJXLImage), |
132 | | #endif |
133 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
134 | | STATICM("LABEL",RegisterLABELImage,UnregisterLABELImage), |
135 | | STATICM("LOCALE",RegisterLOCALEImage,UnregisterLOCALEImage), |
136 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
137 | | STATICM("LOGO",RegisterLOGOImage,UnregisterLOGOImage), |
138 | | STATICM("MAC",RegisterMACImage,UnregisterMACImage), |
139 | | STATICM("MAP",RegisterMAPImage,UnregisterMAPImage), |
140 | | STATICM("MAT",RegisterMATImage,UnregisterMATImage), |
141 | | STATICM("MATTE",RegisterMATTEImage,UnregisterMATTEImage), |
142 | | STATICM("META",RegisterMETAImage,UnregisterMETAImage), |
143 | | STATICM("MIFF",RegisterMIFFImage,UnregisterMIFFImage), |
144 | | STATICM("MONO",RegisterMONOImage,UnregisterMONOImage), |
145 | | STATICM("MPC",RegisterMPCImage,UnregisterMPCImage), |
146 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
147 | | STATICM("MPEG",RegisterMPEGImage,UnregisterMPEGImage), |
148 | | STATICM("MPR",RegisterMPRImage,UnregisterMPRImage), |
149 | | STATICM("MSL",RegisterMSLImage,UnregisterMSLImage), |
150 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
151 | | STATICM("MTV",RegisterMTVImage,UnregisterMTVImage), |
152 | | STATICM("MVG",RegisterMVGImage,UnregisterMVGImage), |
153 | | STATICM("NULL",RegisterNULLImage,UnregisterNULLImage), |
154 | | #if defined(HasPNG) && (defined(HasUNZIP) || defined(HasLIBZIP)) |
155 | | STATICM("ORA",RegisterORAImage,UnregisterORAImage), |
156 | | #endif |
157 | | STATICM("OTB",RegisterOTBImage,UnregisterOTBImage), |
158 | | STATICM("PALM",RegisterPALMImage,UnregisterPALMImage), |
159 | | STATICM("PCD",RegisterPCDImage,UnregisterPCDImage), |
160 | | STATICM("PCL",RegisterPCLImage,UnregisterPCLImage), |
161 | | STATICM("PCX",RegisterPCXImage,UnregisterPCXImage), |
162 | | STATICM("PDB",RegisterPDBImage,UnregisterPDBImage), |
163 | | STATICM("PDF",RegisterPDFImage,UnregisterPDFImage), |
164 | | STATICM("PICT",RegisterPICTImage,UnregisterPICTImage), |
165 | | STATICM("PIX",RegisterPIXImage,UnregisterPIXImage), |
166 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
167 | | STATICM("PLASMA",RegisterPLASMAImage,UnregisterPLASMAImage), |
168 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
169 | | #if defined(HasPNG) |
170 | | STATICM("PNG",RegisterPNGImage,UnregisterPNGImage), |
171 | | #endif |
172 | | STATICM("PNM",RegisterPNMImage,UnregisterPNMImage), |
173 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
174 | | STATICM("PREVIEW",RegisterPREVIEWImage,UnregisterPREVIEWImage), |
175 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
176 | | STATICM("PS",RegisterPSImage,UnregisterPSImage), |
177 | | STATICM("PS2",RegisterPS2Image,UnregisterPS2Image), |
178 | | STATICM("PS3",RegisterPS3Image,UnregisterPS3Image), |
179 | | #if defined(EnableBrokenCoders) && EnableBrokenCoders |
180 | | STATICM("PSD",RegisterPSDImage,UnregisterPSDImage), |
181 | | #endif /* defined(EnableBrokenCoders) && EnableBrokenCoders */ |
182 | | STATICM("PWP",RegisterPWPImage,UnregisterPWPImage), |
183 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
184 | | STATICM("RGB",RegisterRGBImage,UnregisterRGBImage), |
185 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
186 | | STATICM("RLA",RegisterRLAImage,UnregisterRLAImage), |
187 | | STATICM("RLE",RegisterRLEImage,UnregisterRLEImage), |
188 | | STATICM("SCT",RegisterSCTImage,UnregisterSCTImage), |
189 | | STATICM("SFW",RegisterSFWImage,UnregisterSFWImage), |
190 | | STATICM("SGI",RegisterSGIImage,UnregisterSGIImage), |
191 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
192 | | STATICM("STEGANO",RegisterSTEGANOImage,UnregisterSTEGANOImage), |
193 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
194 | | STATICM("SUN",RegisterSUNImage,UnregisterSUNImage), |
195 | | STATICM("SVG",RegisterSVGImage,UnregisterSVGImage), |
196 | | STATICM("TGA",RegisterTGAImage,UnregisterTGAImage), |
197 | | #if defined(HasTIFF) |
198 | | STATICM("TIFF",RegisterTIFFImage,UnregisterTIFFImage), |
199 | | #endif |
200 | | #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) |
201 | | STATICM("TILE",RegisterTILEImage,UnregisterTILEImage), |
202 | | #endif /* if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) */ |
203 | | STATICM("TIM",RegisterTIMImage,UnregisterTIMImage), |
204 | | STATICM("TOPOL",RegisterTOPOLImage,UnregisterTOPOLImage), |
205 | | STATICM("TTF",RegisterTTFImage,UnregisterTTFImage), |
206 | | STATICM("TXT",RegisterTXTImage,UnregisterTXTImage), |
207 | | STATICM("UIL",RegisterUILImage,UnregisterUILImage), |
208 | | STATICM("URL",RegisterURLImage,UnregisterURLImage), |
209 | | STATICM("UYVY",RegisterUYVYImage,UnregisterUYVYImage), |
210 | | STATICM("VICAR",RegisterVICARImage,UnregisterVICARImage), |
211 | | STATICM("VID",RegisterVIDImage,UnregisterVIDImage), |
212 | | STATICM("VIFF",RegisterVIFFImage,UnregisterVIFFImage), |
213 | | STATICM("WBMP",RegisterWBMPImage,UnregisterWBMPImage), |
214 | | #if defined(HasWEBP) |
215 | | STATICM("WEBP",RegisterWEBPImage,UnregisterWEBPImage), |
216 | | #endif |
217 | | STATICM("WMF",RegisterWMFImage,UnregisterWMFImage), |
218 | | STATICM("WPG",RegisterWPGImage,UnregisterWPGImage), |
219 | | #if defined(HasX11) |
220 | | STATICM("X",RegisterXImage,UnregisterXImage), |
221 | | #endif /* defined(HasX11) */ |
222 | | STATICM("XBM",RegisterXBMImage,UnregisterXBMImage), |
223 | | STATICM("XC",RegisterXCImage,UnregisterXCImage), |
224 | | STATICM("XCF",RegisterXCFImage,UnregisterXCFImage), |
225 | | STATICM("XPM",RegisterXPMImage,UnregisterXPMImage), |
226 | | #if defined(_VISUALC_) |
227 | | #if defined(EnableXTRNCoder) |
228 | | STATICM("XTRN",RegisterXTRNImage,UnregisterXTRNImage), |
229 | | #endif /* if defined(EnableXTRNCoder) */ |
230 | | #endif /* defined(_VISUALC_) */ |
231 | | #if defined(HasX11) |
232 | | STATICM("XWD",RegisterXWDImage,UnregisterXWDImage), |
233 | | #endif /* defined(HasX11) */ |
234 | | STATICM("YUV",RegisterYUVImage,UnregisterYUVImage) |
235 | | }; |
236 | | |
237 | | static unsigned char StaticModulesLoaded[ArraySize(StaticModules)] = { MagickFalse }; |
238 | | |
239 | | |
240 | | /* |
241 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
242 | | % % |
243 | | % % |
244 | | % % |
245 | | + D e s t r o y M a g i c k M o d u l e s % |
246 | | % % |
247 | | % % |
248 | | % % |
249 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
250 | | % |
251 | | % DestroyMagickResources() destroys the resource environment. |
252 | | % |
253 | | % The format of the DestroyMagickResources() method is: |
254 | | % |
255 | | % DestroyMagickResources(void) |
256 | | % |
257 | | % |
258 | | */ |
259 | | void |
260 | | DestroyMagickModules(void) |
261 | 0 | { |
262 | 0 | unsigned int index; |
263 | |
|
264 | 0 | for (index=0; index < ArraySize(StaticModules);index++) |
265 | 0 | { |
266 | 0 | if (StaticModulesLoaded[index] != MagickFalse) |
267 | 0 | { |
268 | 0 | (StaticModules[index].unregister_fn)(); |
269 | 0 | StaticModulesLoaded[index] = MagickFalse; |
270 | 0 | } |
271 | 0 | } |
272 | 0 | } |
273 | | |
274 | | /* |
275 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
276 | | % % |
277 | | % % |
278 | | % % |
279 | | + I n i t i a l i z e M a g i c k M o d u l e s % |
280 | | % % |
281 | | % % |
282 | | % % |
283 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
284 | | % |
285 | | % InitializeMagickModules() initializes the module loader. |
286 | | % |
287 | | % The format of the InitializeMagickModules() method is: |
288 | | % |
289 | | % InitializeMagickModules(void) |
290 | | % |
291 | | % |
292 | | */ |
293 | | void |
294 | | InitializeMagickModules(void) |
295 | 254 | { |
296 | 254 | } |
297 | | |
298 | | /* |
299 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
300 | | % % |
301 | | % % |
302 | | % % |
303 | | % O p e n M o d u l e % |
304 | | % % |
305 | | % % |
306 | | % % |
307 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
308 | | % |
309 | | % OpenModule() loads a module, and invokes its registration method. It |
310 | | % returns MagickPass on success, and MagickFail if there is an error. |
311 | | % |
312 | | % The format of the OpenModule method is: |
313 | | % |
314 | | % MagickPassFail OpenModule(const char *module,ExceptionInfo *exception) |
315 | | % |
316 | | % A description of each parameter follows: |
317 | | % |
318 | | % o status: Method OpenModule returns MagickPass if the specified module is |
319 | | % loaded, otherwise MagickFail. |
320 | | % |
321 | | % o module: a character string that indicates the module to load. |
322 | | % |
323 | | % o exception: Return any errors or warnings in this structure. |
324 | | % |
325 | | % |
326 | | */ |
327 | | MagickPassFail |
328 | | OpenModule(const char *module,ExceptionInfo *exception) |
329 | 25.6k | { |
330 | 25.6k | char |
331 | 25.6k | module_name[MaxTextExtent]; |
332 | | |
333 | 25.6k | size_t |
334 | 25.6k | name_length; |
335 | | |
336 | 25.6k | unsigned int |
337 | 25.6k | index; |
338 | | |
339 | 25.6k | MagickPassFail |
340 | 25.6k | status = MagickFail; |
341 | | |
342 | 25.6k | (void) exception; |
343 | | /* |
344 | | Assign module name from alias. |
345 | | */ |
346 | 25.6k | assert(module != (const char *) NULL); |
347 | 25.6k | name_length=strlcpy(module_name,module,MaxTextExtent); |
348 | 25.6k | LocaleUpper(module_name); |
349 | 25.6k | (void) LogMagickEvent(ConfigureEvent,GetMagickModule(), |
350 | 25.6k | "Magick \"%s\"", module_name); |
351 | 2.78M | for (index=0; index < ArraySize(ModuleAliases);index++) |
352 | 2.78M | { |
353 | 2.78M | if (ModuleAliases[index].magick[0] > module_name[0]) |
354 | 25.5k | break; |
355 | 2.75M | if ((ModuleAliases[index].magick[0] == module_name[0]) && |
356 | 176k | (ModuleAliases[index].magick_len == name_length) && |
357 | 42.9k | (memcmp(ModuleAliases[index].magick,module_name,name_length) == 0)) |
358 | 86 | { |
359 | 86 | name_length=strlcpy(module_name,ModuleAliases[index].name,MaxTextExtent); |
360 | 86 | break; |
361 | 86 | } |
362 | 2.75M | } |
363 | | |
364 | | /* |
365 | | Find module in list and load if not already loaded |
366 | | */ |
367 | 1.51M | for (index=0; index < ArraySize(StaticModules);index++) |
368 | 1.51M | { |
369 | 1.51M | if (StaticModules[index].name[0] > module_name[0]) |
370 | 25.3k | break; |
371 | 1.49M | if ((StaticModules[index].name[0] == module_name[0]) && |
372 | 135k | (StaticModules[index].name_length == name_length) && |
373 | 70.2k | (memcmp(StaticModules[index].name,module_name,name_length) == 0)) |
374 | 322 | { |
375 | 322 | if (StaticModulesLoaded[index] == MagickFalse) |
376 | 322 | { |
377 | 322 | (StaticModules[index].register_fn)(); |
378 | 322 | StaticModulesLoaded[index] = MagickTrue; |
379 | 322 | (void) LogMagickEvent(ConfigureEvent,GetMagickModule(), |
380 | 322 | "Loaded static module \"%s\"", module_name); |
381 | 322 | } |
382 | 322 | status=MagickPass; |
383 | 322 | break; |
384 | 322 | } |
385 | 1.49M | } |
386 | 25.6k | if (index == ArraySize(StaticModules)) |
387 | 0 | status=MagickFail; |
388 | | |
389 | 25.6k | return status; |
390 | 25.6k | } |
391 | | |
392 | | /* |
393 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
394 | | % % |
395 | | % % |
396 | | % % |
397 | | % O p e n M o d u l e s % |
398 | | % % |
399 | | % % |
400 | | % % |
401 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
402 | | % |
403 | | % Method OpenModules loads all available modules. |
404 | | % |
405 | | % The format of the OpenModules method is: |
406 | | % |
407 | | % MagickPassFail OpenModules(ExceptionInfo *exception) |
408 | | % |
409 | | % A description of each parameter follows: |
410 | | % |
411 | | % o status: Method OpenModules returns True if the modules are loaded, |
412 | | % otherwise False. |
413 | | % |
414 | | % o exception: Return any errors or warnings in this structure. |
415 | | % |
416 | | */ |
417 | | MagickPassFail |
418 | | OpenModules(ExceptionInfo *exception) |
419 | 0 | { |
420 | 0 | unsigned int index; |
421 | 0 | (void) exception; |
422 | |
|
423 | 0 | for (index=0; index < ArraySize(StaticModules); index++) |
424 | 0 | { |
425 | 0 | if (StaticModulesLoaded[index] == MagickFalse) |
426 | 0 | { |
427 | 0 | (StaticModules[index].register_fn)(); |
428 | 0 | StaticModulesLoaded[index] = MagickTrue; |
429 | 0 | } |
430 | 0 | } |
431 | |
|
432 | 0 | return MagickPass; |
433 | 0 | } |
434 | | #endif /* !defined(SupportMagickModules) */ |
435 | | |
436 | | /* |
437 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
438 | | % % |
439 | | % % |
440 | | % % |
441 | | % E x e c u t e S t a t i c M o d u l e P r o c e s s % |
442 | | % % |
443 | | % % |
444 | | % % |
445 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
446 | | % |
447 | | % ExecuteStaticModuleProcess() is just a template method. This version is |
448 | | % only used for static and moby builds. See the version in module.c for |
449 | | % module-only builds. This function takes the place of ExecuteModuleProcess |
450 | | % for builds which do not support loading modules. |
451 | | % |
452 | | % The format of the ExecuteStaticModuleProcess method is: |
453 | | % |
454 | | % unsigned int ExecuteStaticModuleProcess(const char *tag, |
455 | | % Image **image,const int argc,char **argv) |
456 | | % |
457 | | % A description of each parameter follows: |
458 | | % |
459 | | % o tag: The module tag. |
460 | | % |
461 | | % o image: The image. |
462 | | % |
463 | | % o argc: The number of elements in the argument vector. |
464 | | % |
465 | | % o argv: A text array containing the command line arguments. |
466 | | % |
467 | | */ |
468 | | #if defined(SupportMagickModules) |
469 | | unsigned int ExecuteStaticModuleProcess(const char *tag, |
470 | | Image **image,const int argc,char **argv) |
471 | | #else |
472 | | unsigned int ExecuteModuleProcess(const char *tag, |
473 | | Image **image,const int argc,char **argv) |
474 | | #endif /* defined(SupportMagickModules) */ |
475 | 0 | { |
476 | 0 | unsigned int |
477 | 0 | status = False; |
478 | |
|
479 | 0 | #if !defined(SupportMagickModules) |
480 | 0 | unsigned int |
481 | 0 | (*method)(Image **,const int,char **) = 0; |
482 | |
|
483 | 0 | if (LocaleCompare("analyze",tag) == 0) |
484 | 0 | method=AnalyzeImage; |
485 | |
|
486 | 0 | if (method) |
487 | 0 | { |
488 | 0 | (void) LogMagickEvent(CoderEvent,GetMagickModule(), |
489 | 0 | "Invoking \"%.1024s\" filter module",tag); |
490 | |
|
491 | 0 | status=(*method)(image,argc,argv); |
492 | |
|
493 | 0 | (void) LogMagickEvent(CoderEvent,GetMagickModule(), |
494 | 0 | "Returned from \"%.1024s\" filter module",tag); |
495 | 0 | } |
496 | | #else |
497 | | ARG_NOT_USED(tag); |
498 | | ARG_NOT_USED(image); |
499 | | ARG_NOT_USED(argc); |
500 | | ARG_NOT_USED(argv); |
501 | | #endif /* !defined(SupportMagickModules) */ |
502 | 0 | return(status); |
503 | 0 | } |
504 | | |
505 | | /* |
506 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
507 | | % % |
508 | | % % |
509 | | % % |
510 | | % R e g i s t e r S t a t i c M o d u l e s % |
511 | | % % |
512 | | % % |
513 | | % % |
514 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
515 | | % |
516 | | % |
517 | | RegisterStaticModules() statically registers all the available module |
518 | | % handlers. |
519 | | % |
520 | | % The format of the RegisterStaticModules method is: |
521 | | % |
522 | | % RegisterStaticModules(void) |
523 | | % |
524 | | % |
525 | | */ |
526 | | void RegisterStaticModules(void) |
527 | 0 | { |
528 | 0 | #if !defined(SupportMagickModules) |
529 | 0 | unsigned int index; |
530 | |
|
531 | 0 | for (index=0; index < ArraySize(StaticModules); index++) |
532 | 0 | { |
533 | 0 | if (StaticModulesLoaded[index] == MagickFalse) |
534 | 0 | { |
535 | 0 | (StaticModules[index].register_fn)(); |
536 | 0 | StaticModulesLoaded[index] = MagickTrue; |
537 | 0 | } |
538 | 0 | } |
539 | 0 | #endif /* !defined(SupportMagickModules) */ |
540 | 0 | } |
541 | | |
542 | | /* |
543 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
544 | | % % |
545 | | % % |
546 | | % % |
547 | | % U n r e g i s t e r S t a t i c M o d u l e s % |
548 | | % % |
549 | | % % |
550 | | % % |
551 | | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
552 | | % |
553 | | % UnregisterStaticModules() statically unregisters all the available module |
554 | | % handlers. This allows allocated resources to be freed. |
555 | | % |
556 | | % The format of the UnRegisterStaticModules method is: |
557 | | % |
558 | | % UnRegisterStaticModules(void) |
559 | | % |
560 | | % |
561 | | */ |
562 | | void UnregisterStaticModules(void) |
563 | 0 | { |
564 | 0 | #if !defined(SupportMagickModules) |
565 | 0 | unsigned int index; |
566 | |
|
567 | 0 | for (index=0; index < ArraySize(StaticModules);index++) |
568 | 0 | { |
569 | 0 | if (StaticModulesLoaded[index] != MagickFalse) |
570 | 0 | { |
571 | 0 | (StaticModules[index].unregister_fn)(); |
572 | 0 | StaticModulesLoaded[index] = MagickFalse; |
573 | 0 | } |
574 | 0 | } |
575 | 0 | #endif /* !defined(SupportMagickModules) */ |
576 | 0 | } |