1 // This may look like C code, but it is really -*- C++ -*-
2 //
3 // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
4 // Copyright Dirk Lemstra 2014-2015
5 //
6 // Implementation of Exception and derived classes
7 //
8
9 #define MAGICKCORE_IMPLEMENTATION 1
10 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1
11
12 #include "Magick++/Include.h"
13 #include <string>
14 #include <errno.h>
15 #include <string.h>
16
17 using namespace std;
18
19 #include "Magick++/Exception.h"
20
Exception(const std::string & what_)21 Magick::Exception::Exception(const std::string& what_)
22 : std::exception(),
23 _what(what_),
24 _nested((Exception *) NULL)
25 {
26 }
27
Exception(const std::string & what_,Exception * nested_)28 Magick::Exception::Exception(const std::string& what_,
29 Exception* nested_)
30 : std::exception(),
31 _what(what_),
32 _nested(nested_)
33 {
34 }
35
Exception(const Magick::Exception & original_)36 Magick::Exception::Exception(const Magick::Exception& original_)
37 : exception(original_),
38 _what(original_._what),
39 _nested((Exception *) NULL)
40 {
41 }
42
~Exception()43 Magick::Exception::~Exception() throw()
44 {
45 if (_nested != (Exception *) NULL)
46 delete _nested;
47 }
48
operator =(const Magick::Exception & original_)49 Magick::Exception& Magick::Exception::operator=(
50 const Magick::Exception& original_)
51 {
52 if (this != &original_)
53 this->_what=original_._what;
54 return(*this);
55 }
56
what() const57 const char* Magick::Exception::what() const throw()
58 {
59 return(_what.c_str());
60 }
61
nested() const62 const Magick::Exception* Magick::Exception::nested() const throw()
63 {
64 return(_nested);
65 }
66
nested(Exception * nested_)67 void Magick::Exception::nested(Exception* nested_) throw()
68 {
69 _nested=nested_;
70 }
71
Error(const std::string & what_)72 Magick::Error::Error(const std::string& what_)
73 : Exception(what_)
74 {
75 }
76
Error(const std::string & what_,Exception * nested_)77 Magick::Error::Error(const std::string& what_,Exception *nested_)
78 : Exception(what_,nested_)
79 {
80 }
81
~Error()82 Magick::Error::~Error() throw()
83 {
84 }
85
ErrorBlob(const std::string & what_)86 Magick::ErrorBlob::ErrorBlob(const std::string& what_)
87 : Error(what_)
88 {
89 }
90
ErrorBlob(const std::string & what_,Exception * nested_)91 Magick::ErrorBlob::ErrorBlob(const std::string& what_,Exception *nested_)
92 : Error(what_,nested_)
93 {
94 }
95
~ErrorBlob()96 Magick::ErrorBlob::~ErrorBlob() throw()
97 {
98 }
99
ErrorCache(const std::string & what_)100 Magick::ErrorCache::ErrorCache(const std::string& what_)
101 : Error(what_)
102 {
103 }
104
ErrorCache(const std::string & what_,Exception * nested_)105 Magick::ErrorCache::ErrorCache(const std::string& what_,Exception *nested_)
106 : Error(what_,nested_)
107 {
108 }
109
~ErrorCache()110 Magick::ErrorCache::~ErrorCache() throw()
111 {
112 }
113
ErrorCoder(const std::string & what_)114 Magick::ErrorCoder::ErrorCoder(const std::string& what_)
115 : Error(what_)
116 {
117 }
118
ErrorCoder(const std::string & what_,Exception * nested_)119 Magick::ErrorCoder::ErrorCoder(const std::string& what_,Exception *nested_)
120 : Error(what_,nested_)
121 {
122 }
123
~ErrorCoder()124 Magick::ErrorCoder::~ErrorCoder() throw()
125 {
126 }
127
ErrorConfigure(const std::string & what_)128 Magick::ErrorConfigure::ErrorConfigure(const std::string& what_)
129 : Error(what_)
130 {
131 }
132
ErrorConfigure(const std::string & what_,Exception * nested_)133 Magick::ErrorConfigure::ErrorConfigure(const std::string& what_,
134 Exception *nested_)
135 : Error(what_,nested_)
136 {
137 }
138
~ErrorConfigure()139 Magick::ErrorConfigure::~ErrorConfigure() throw()
140 {
141 }
142
ErrorCorruptImage(const std::string & what_)143 Magick::ErrorCorruptImage::ErrorCorruptImage(const std::string& what_)
144 : Error(what_)
145 {
146 }
147
ErrorCorruptImage(const std::string & what_,Exception * nested_)148 Magick::ErrorCorruptImage::ErrorCorruptImage(const std::string& what_,
149 Exception *nested_)
150 : Error(what_,nested_)
151 {
152 }
153
~ErrorCorruptImage()154 Magick::ErrorCorruptImage::~ErrorCorruptImage() throw()
155 {
156 }
157
ErrorDelegate(const std::string & what_)158 Magick::ErrorDelegate::ErrorDelegate(const std::string& what_)
159 : Error(what_)
160 {
161 }
162
ErrorDelegate(const std::string & what_,Exception * nested_)163 Magick::ErrorDelegate::ErrorDelegate(const std::string& what_,
164 Exception *nested_)
165 : Error(what_,nested_)
166 {
167 }
168
~ErrorDelegate()169 Magick::ErrorDelegate::~ErrorDelegate()throw()
170 {
171 }
172
ErrorDraw(const std::string & what_)173 Magick::ErrorDraw::ErrorDraw(const std::string& what_)
174 : Error(what_)
175 {
176 }
177
ErrorDraw(const std::string & what_,Exception * nested_)178 Magick::ErrorDraw::ErrorDraw(const std::string& what_,Exception *nested_)
179 : Error(what_,nested_)
180 {
181 }
182
~ErrorDraw()183 Magick::ErrorDraw::~ErrorDraw() throw()
184 {
185 }
186
ErrorFileOpen(const std::string & what_)187 Magick::ErrorFileOpen::ErrorFileOpen(const std::string& what_)
188 : Error(what_)
189 {
190 }
191
~ErrorFileOpen()192 Magick::ErrorFileOpen::~ErrorFileOpen() throw()
193 {
194 }
195
ErrorFileOpen(const std::string & what_,Exception * nested_)196 Magick::ErrorFileOpen::ErrorFileOpen(const std::string& what_,
197 Exception *nested_)
198 : Error(what_,nested_)
199 {
200 }
201
202
ErrorImage(const std::string & what_)203 Magick::ErrorImage::ErrorImage(const std::string& what_)
204 : Error(what_)
205 {
206 }
207
ErrorImage(const std::string & what_,Exception * nested_)208 Magick::ErrorImage::ErrorImage(const std::string& what_,Exception *nested_)
209 : Error(what_,nested_)
210 {
211 }
212
~ErrorImage()213 Magick::ErrorImage::~ErrorImage() throw()
214 {
215 }
216
ErrorMissingDelegate(const std::string & what_)217 Magick::ErrorMissingDelegate::ErrorMissingDelegate(const std::string& what_)
218 : Error(what_)
219 {
220 }
221
ErrorMissingDelegate(const std::string & what_,Exception * nested_)222 Magick::ErrorMissingDelegate::ErrorMissingDelegate(const std::string& what_,
223 Exception *nested_)
224 : Error(what_,nested_)
225 {
226 }
227
~ErrorMissingDelegate()228 Magick::ErrorMissingDelegate::~ErrorMissingDelegate() throw ()
229 {
230 }
231
ErrorModule(const std::string & what_)232 Magick::ErrorModule::ErrorModule(const std::string& what_)
233 : Error(what_)
234 {
235 }
236
ErrorModule(const std::string & what_,Exception * nested_)237 Magick::ErrorModule::ErrorModule(const std::string& what_,Exception *nested_)
238 : Error(what_,nested_)
239 {
240 }
241
~ErrorModule()242 Magick::ErrorModule::~ErrorModule() throw()
243 {
244 }
245
ErrorMonitor(const std::string & what_)246 Magick::ErrorMonitor::ErrorMonitor(const std::string& what_)
247 : Error(what_)
248 {
249 }
250
ErrorMonitor(const std::string & what_,Exception * nested_)251 Magick::ErrorMonitor::ErrorMonitor(const std::string& what_,Exception *nested_)
252 : Error(what_,nested_)
253 {
254 }
255
~ErrorMonitor()256 Magick::ErrorMonitor::~ErrorMonitor() throw()
257 {
258 }
259
ErrorOption(const std::string & what_)260 Magick::ErrorOption::ErrorOption(const std::string& what_)
261 : Error(what_)
262 {
263 }
264
ErrorOption(const std::string & what_,Exception * nested_)265 Magick::ErrorOption::ErrorOption(const std::string& what_,Exception *nested_)
266 : Error(what_,nested_)
267 {
268 }
269
~ErrorOption()270 Magick::ErrorOption::~ErrorOption() throw()
271 {
272 }
273
ErrorPolicy(const std::string & what_)274 Magick::ErrorPolicy::ErrorPolicy(const std::string& what_)
275 : Error(what_)
276 {
277 }
278
ErrorPolicy(const std::string & what_,Exception * nested_)279 Magick::ErrorPolicy::ErrorPolicy(const std::string& what_,Exception *nested_)
280 : Error(what_,nested_)
281 {
282 }
283
~ErrorPolicy()284 Magick::ErrorPolicy::~ErrorPolicy() throw()
285 {
286 }
287
288
ErrorRegistry(const std::string & what_)289 Magick::ErrorRegistry::ErrorRegistry(const std::string& what_)
290 : Error(what_)
291 {
292 }
293
ErrorRegistry(const std::string & what_,Exception * nested_)294 Magick::ErrorRegistry::ErrorRegistry(const std::string& what_,
295 Exception *nested_)
296 : Error(what_,nested_)
297 {
298 }
299
~ErrorRegistry()300 Magick::ErrorRegistry::~ErrorRegistry() throw()
301 {
302 }
303
ErrorResourceLimit(const std::string & what_)304 Magick::ErrorResourceLimit::ErrorResourceLimit(const std::string& what_)
305 : Error(what_)
306 {
307 }
308
ErrorResourceLimit(const std::string & what_,Exception * nested_)309 Magick::ErrorResourceLimit::ErrorResourceLimit(const std::string& what_,
310 Exception *nested_)
311 : Error(what_,nested_)
312 {
313 }
314
~ErrorResourceLimit()315 Magick::ErrorResourceLimit::~ErrorResourceLimit() throw()
316 {
317 }
318
ErrorStream(const std::string & what_)319 Magick::ErrorStream::ErrorStream(const std::string& what_)
320 : Error(what_)
321 {
322 }
323
ErrorStream(const std::string & what_,Exception * nested_)324 Magick::ErrorStream::ErrorStream(const std::string& what_,Exception *nested_)
325 : Error(what_,nested_)
326 {
327 }
328
~ErrorStream()329 Magick::ErrorStream::~ErrorStream() throw()
330 {
331 }
332
ErrorType(const std::string & what_)333 Magick::ErrorType::ErrorType(const std::string& what_)
334 : Error(what_)
335 {
336 }
337
ErrorType(const std::string & what_,Exception * nested_)338 Magick::ErrorType::ErrorType(const std::string& what_,Exception *nested_)
339 : Error(what_,nested_)
340 {
341 }
342
~ErrorType()343 Magick::ErrorType::~ErrorType() throw()
344 {
345 }
346
ErrorUndefined(const std::string & what_)347 Magick::ErrorUndefined::ErrorUndefined(const std::string& what_)
348 : Error(what_)
349 {
350 }
351
ErrorUndefined(const std::string & what_,Exception * nested_)352 Magick::ErrorUndefined::ErrorUndefined(const std::string& what_,
353 Exception *nested_)
354 : Error(what_,nested_)
355 {
356 }
357
~ErrorUndefined()358 Magick::ErrorUndefined::~ErrorUndefined() throw()
359 {
360 }
361
ErrorXServer(const std::string & what_)362 Magick::ErrorXServer::ErrorXServer(const std::string& what_)
363 : Error(what_)
364 {
365 }
366
ErrorXServer(const std::string & what_,Exception * nested_)367 Magick::ErrorXServer::ErrorXServer(const std::string& what_,Exception *nested_)
368 : Error(what_,nested_)
369 {
370 }
371
~ErrorXServer()372 Magick::ErrorXServer::~ErrorXServer() throw ()
373 {
374 }
375
Warning(const std::string & what_)376 Magick::Warning::Warning(const std::string& what_)
377 : Exception(what_)
378 {
379 }
380
Warning(const std::string & what_,Exception * nested_)381 Magick::Warning::Warning(const std::string& what_,Exception *nested_)
382 : Exception(what_,nested_)
383 {
384 }
385
~Warning()386 Magick::Warning::~Warning() throw()
387 {
388 }
389
WarningBlob(const std::string & what_)390 Magick::WarningBlob::WarningBlob(const std::string& what_)
391 : Warning(what_)
392 {
393 }
394
WarningBlob(const std::string & what_,Exception * nested_)395 Magick::WarningBlob::WarningBlob(const std::string& what_,Exception *nested_)
396 : Warning(what_,nested_)
397 {
398 }
399
~WarningBlob()400 Magick::WarningBlob::~WarningBlob() throw()
401 {
402 }
403
WarningCache(const std::string & what_)404 Magick::WarningCache::WarningCache(const std::string& what_)
405 : Warning(what_)
406 {
407 }
408
WarningCache(const std::string & what_,Exception * nested_)409 Magick::WarningCache::WarningCache(const std::string& what_,Exception *nested_)
410 : Warning(what_,nested_)
411 {
412 }
413
~WarningCache()414 Magick::WarningCache::~WarningCache() throw()
415 {
416 }
417
WarningCoder(const std::string & what_)418 Magick::WarningCoder::WarningCoder(const std::string& what_)
419 : Warning(what_)
420 {
421 }
422
WarningCoder(const std::string & what_,Exception * nested_)423 Magick::WarningCoder::WarningCoder(const std::string& what_,Exception *nested_)
424 : Warning(what_,nested_)
425 {
426 }
427
~WarningCoder()428 Magick::WarningCoder::~WarningCoder() throw()
429 {
430 }
431
WarningConfigure(const std::string & what_)432 Magick::WarningConfigure::WarningConfigure(const std::string& what_)
433 : Warning(what_)
434 {
435 }
436
WarningConfigure(const std::string & what_,Exception * nested_)437 Magick::WarningConfigure::WarningConfigure(const std::string& what_,
438 Exception *nested_)
439 : Warning(what_,nested_)
440 {
441 }
442
~WarningConfigure()443 Magick::WarningConfigure::~WarningConfigure() throw()
444 {
445 }
446
WarningCorruptImage(const std::string & what_)447 Magick::WarningCorruptImage::WarningCorruptImage(const std::string& what_)
448 : Warning(what_)
449 {
450 }
451
WarningCorruptImage(const std::string & what_,Exception * nested_)452 Magick::WarningCorruptImage::WarningCorruptImage(const std::string& what_,
453 Exception *nested_)
454 : Warning(what_,nested_)
455 {
456 }
457
~WarningCorruptImage()458 Magick::WarningCorruptImage::~WarningCorruptImage() throw()
459 {
460 }
461
WarningDelegate(const std::string & what_)462 Magick::WarningDelegate::WarningDelegate(const std::string& what_)
463 : Warning(what_)
464 {
465 }
466
WarningDelegate(const std::string & what_,Exception * nested_)467 Magick::WarningDelegate::WarningDelegate(const std::string& what_,
468 Exception *nested_)
469 : Warning(what_,nested_)
470 {
471 }
472
~WarningDelegate()473 Magick::WarningDelegate::~WarningDelegate() throw()
474 {
475 }
476
WarningDraw(const std::string & what_)477 Magick::WarningDraw::WarningDraw(const std::string& what_)
478 : Warning(what_)
479 {
480 }
481
WarningDraw(const std::string & what_,Exception * nested_)482 Magick::WarningDraw::WarningDraw(const std::string& what_,Exception *nested_)
483 : Warning(what_,nested_)
484 {
485 }
486
~WarningDraw()487 Magick::WarningDraw::~WarningDraw() throw()
488 {
489 }
490
WarningFileOpen(const std::string & what_)491 Magick::WarningFileOpen::WarningFileOpen(const std::string& what_)
492 : Warning(what_)
493 {
494 }
495
WarningFileOpen(const std::string & what_,Exception * nested_)496 Magick::WarningFileOpen::WarningFileOpen(const std::string& what_,
497 Exception *nested_)
498 : Warning(what_,nested_)
499 {
500 }
501
~WarningFileOpen()502 Magick::WarningFileOpen::~WarningFileOpen() throw()
503 {
504 }
505
WarningImage(const std::string & what_)506 Magick::WarningImage::WarningImage(const std::string& what_)
507 : Warning(what_)
508 {
509 }
510
WarningImage(const std::string & what_,Exception * nested_)511 Magick::WarningImage::WarningImage(const std::string& what_,Exception *nested_)
512 : Warning(what_,nested_)
513 {
514 }
515
~WarningImage()516 Magick::WarningImage::~WarningImage() throw()
517 {
518 }
519
WarningMissingDelegate(const std::string & what_)520 Magick::WarningMissingDelegate::WarningMissingDelegate(
521 const std::string& what_)
522 : Warning(what_)
523 {
524 }
525
WarningMissingDelegate(const std::string & what_,Exception * nested_)526 Magick::WarningMissingDelegate::WarningMissingDelegate(
527 const std::string& what_,Exception *nested_)
528 : Warning(what_,nested_)
529 {
530 }
531
~WarningMissingDelegate()532 Magick::WarningMissingDelegate::~WarningMissingDelegate() throw()
533 {
534 }
535
WarningModule(const std::string & what_)536 Magick::WarningModule::WarningModule(const std::string& what_)
537 : Warning(what_)
538 {
539 }
540
WarningModule(const std::string & what_,Exception * nested_)541 Magick::WarningModule::WarningModule(const std::string& what_,
542 Exception *nested_)
543 : Warning(what_,nested_)
544 {
545 }
546
547
~WarningModule()548 Magick::WarningModule::~WarningModule() throw()
549 {
550 }
551
WarningMonitor(const std::string & what_)552 Magick::WarningMonitor::WarningMonitor(const std::string& what_)
553 : Warning(what_)
554 {
555 }
556
WarningMonitor(const std::string & what_,Exception * nested_)557 Magick::WarningMonitor::WarningMonitor(const std::string& what_,
558 Exception *nested_)
559 : Warning(what_,nested_)
560 {
561 }
562
~WarningMonitor()563 Magick::WarningMonitor::~WarningMonitor() throw()
564 {
565 }
566
WarningOption(const std::string & what_)567 Magick::WarningOption::WarningOption(const std::string& what_)
568 : Warning(what_)
569 {
570 }
571
WarningOption(const std::string & what_,Exception * nested_)572 Magick::WarningOption::WarningOption(const std::string& what_,
573 Exception *nested_)
574 : Warning(what_,nested_)
575 {
576 }
577
~WarningOption()578 Magick::WarningOption::~WarningOption() throw()
579 {
580 }
581
WarningRegistry(const std::string & what_)582 Magick::WarningRegistry::WarningRegistry(const std::string& what_)
583 : Warning(what_)
584 {
585 }
586
WarningRegistry(const std::string & what_,Exception * nested_)587 Magick::WarningRegistry::WarningRegistry(const std::string& what_,
588 Exception *nested_)
589 : Warning(what_,nested_)
590 {
591 }
592
~WarningRegistry()593 Magick::WarningRegistry::~WarningRegistry() throw()
594 {
595 }
596
WarningPolicy(const std::string & what_)597 Magick::WarningPolicy::WarningPolicy(const std::string& what_)
598 : Warning(what_)
599 {
600 }
601
WarningPolicy(const std::string & what_,Exception * nested_)602 Magick::WarningPolicy::WarningPolicy(const std::string& what_,
603 Exception *nested_)
604 : Warning(what_,nested_)
605 {
606 }
607
~WarningPolicy()608 Magick::WarningPolicy::~WarningPolicy() throw()
609 {
610 }
611
WarningResourceLimit(const std::string & what_)612 Magick::WarningResourceLimit::WarningResourceLimit(const std::string& what_)
613 : Warning(what_)
614 {
615 }
616
WarningResourceLimit(const std::string & what_,Exception * nested_)617 Magick::WarningResourceLimit::WarningResourceLimit(const std::string& what_,
618 Exception *nested_)
619 : Warning(what_,nested_)
620 {
621 }
622
~WarningResourceLimit()623 Magick::WarningResourceLimit::~WarningResourceLimit() throw()
624 {
625 }
626
WarningStream(const std::string & what_)627 Magick::WarningStream::WarningStream(const std::string& what_)
628 : Warning(what_)
629 {
630 }
631
WarningStream(const std::string & what_,Exception * nested_)632 Magick::WarningStream::WarningStream(const std::string& what_,
633 Exception *nested_)
634 : Warning(what_,nested_)
635 {
636 }
637
~WarningStream()638 Magick::WarningStream::~WarningStream() throw()
639 {
640 }
641
WarningType(const std::string & what_)642 Magick::WarningType::WarningType(const std::string& what_)
643 : Warning(what_)
644 {
645 }
646
WarningType(const std::string & what_,Exception * nested_)647 Magick::WarningType::WarningType(const std::string& what_,Exception *nested_)
648 : Warning(what_,nested_)
649 {
650 }
651
~WarningType()652 Magick::WarningType::~WarningType() throw()
653 {
654 }
655
WarningUndefined(const std::string & what_)656 Magick::WarningUndefined::WarningUndefined(const std::string& what_)
657 : Warning(what_)
658 {
659 }
660
WarningUndefined(const std::string & what_,Exception * nested_)661 Magick::WarningUndefined::WarningUndefined(const std::string& what_,
662 Exception *nested_)
663 : Warning(what_,nested_)
664 {
665 }
666
~WarningUndefined()667 Magick::WarningUndefined::~WarningUndefined() throw()
668 {
669 }
670
WarningXServer(const std::string & what_)671 Magick::WarningXServer::WarningXServer(const std::string& what_)
672 : Warning(what_)
673 {
674 }
675
WarningXServer(const std::string & what_,Exception * nested_)676 Magick::WarningXServer::WarningXServer(const std::string& what_,
677 Exception *nested_)
678 : Warning(what_,nested_)
679 {
680 }
681
~WarningXServer()682 Magick::WarningXServer::~WarningXServer() throw()
683 {
684 }
685
formatExceptionMessage(const MagickCore::ExceptionInfo * exception_)686 std::string Magick::formatExceptionMessage(const MagickCore::ExceptionInfo *exception_)
687 {
688 // Format error message ImageMagick-style
689 std::string message=GetClientName();
690 if (exception_->reason != (char *) NULL)
691 {
692 message+=std::string(": ");
693 message+=std::string(exception_->reason);
694 }
695
696 if (exception_->description != (char *) NULL)
697 message += " (" + std::string(exception_->description) + ")";
698 return(message);
699 }
700
createException(const MagickCore::ExceptionInfo * exception_)701 Magick::Exception* Magick::createException(const MagickCore::ExceptionInfo *exception_)
702 {
703 std::string message=formatExceptionMessage(exception_);
704 switch (exception_->severity)
705 {
706 case MagickCore::BlobError:
707 case MagickCore::BlobFatalError:
708 return new ErrorBlob(message);
709 case MagickCore::BlobWarning:
710 return new WarningBlob(message);
711 case MagickCore::CacheError:
712 case MagickCore::CacheFatalError:
713 return new ErrorCache(message);
714 case MagickCore::CacheWarning:
715 return new WarningCache(message);
716 case MagickCore::CoderError:
717 case MagickCore::CoderFatalError:
718 return new ErrorCoder(message);
719 case MagickCore::CoderWarning:
720 return new WarningCoder(message);
721 case MagickCore::ConfigureError:
722 case MagickCore::ConfigureFatalError:
723 return new ErrorConfigure(message);
724 case MagickCore::ConfigureWarning:
725 return new WarningConfigure(message);
726 case MagickCore::CorruptImageError:
727 case MagickCore::CorruptImageFatalError:
728 return new ErrorCorruptImage(message);
729 case MagickCore::CorruptImageWarning:
730 return new WarningCorruptImage(message);
731 case MagickCore::DelegateError:
732 case MagickCore::DelegateFatalError:
733 return new ErrorDelegate(message);
734 case MagickCore::DelegateWarning:
735 return new WarningDelegate(message);
736 case MagickCore::DrawError:
737 case MagickCore::DrawFatalError:
738 return new ErrorDraw(message);
739 case MagickCore::DrawWarning:
740 return new WarningDraw(message);
741 case MagickCore::FileOpenError:
742 case MagickCore::FileOpenFatalError:
743 return new ErrorFileOpen(message);
744 case MagickCore::FileOpenWarning:
745 return new WarningFileOpen(message);
746 case MagickCore::ImageError:
747 case MagickCore::ImageFatalError:
748 return new ErrorImage(message);
749 case MagickCore::ImageWarning:
750 return new WarningImage(message);
751 case MagickCore::MissingDelegateError:
752 case MagickCore::MissingDelegateFatalError:
753 return new ErrorMissingDelegate(message);
754 case MagickCore::MissingDelegateWarning:
755 return new WarningMissingDelegate(message);
756 case MagickCore::ModuleError:
757 case MagickCore::ModuleFatalError:
758 return new ErrorModule(message);
759 case MagickCore::ModuleWarning:
760 return new WarningModule(message);
761 case MagickCore::MonitorError:
762 case MagickCore::MonitorFatalError:
763 return new ErrorMonitor(message);
764 case MagickCore::MonitorWarning:
765 return new WarningMonitor(message);
766 case MagickCore::OptionError:
767 case MagickCore::OptionFatalError:
768 return new ErrorOption(message);
769 case MagickCore::OptionWarning:
770 return new WarningOption(message);
771 case MagickCore::PolicyWarning:
772 return new WarningPolicy(message);
773 case MagickCore::PolicyError:
774 case MagickCore::PolicyFatalError:
775 return new ErrorPolicy(message);
776 case MagickCore::RegistryError:
777 case MagickCore::RegistryFatalError:
778 return new ErrorRegistry(message);
779 case MagickCore::RegistryWarning:
780 return new WarningRegistry(message);
781 case MagickCore::ResourceLimitError:
782 case MagickCore::ResourceLimitFatalError:
783 return new ErrorResourceLimit(message);
784 case MagickCore::ResourceLimitWarning:
785 return new WarningResourceLimit(message);
786 case MagickCore::StreamError:
787 case MagickCore::StreamFatalError:
788 return new ErrorStream(message);
789 case MagickCore::StreamWarning:
790 return new WarningStream(message);
791 case MagickCore::TypeError:
792 case MagickCore::TypeFatalError:
793 return new ErrorType(message);
794 case MagickCore::TypeWarning:
795 return new WarningType(message);
796 case MagickCore::UndefinedException:
797 default:
798 return new ErrorUndefined(message);
799 case MagickCore::XServerError:
800 case MagickCore::XServerFatalError:
801 return new ErrorXServer(message);
802 case MagickCore::XServerWarning:
803 return new WarningXServer(message);
804 }
805 }
806
throwExceptionExplicit(const MagickCore::ExceptionType severity_,const char * reason_,const char * description_)807 MagickPPExport void Magick::throwExceptionExplicit(
808 const MagickCore::ExceptionType severity_,const char* reason_,
809 const char* description_)
810 {
811 // Just return if there is no reported error
812 if (severity_ == MagickCore::UndefinedException)
813 return;
814
815 GetPPException;
816 ThrowException(exceptionInfo,severity_,reason_,description_);
817 ThrowPPException(false);
818 }
819
throwException(ExceptionInfo * exception_,const bool quiet_)820 MagickPPExport void Magick::throwException(ExceptionInfo *exception_,
821 const bool quiet_)
822 {
823 const ExceptionInfo
824 *p;
825
826 Exception
827 *nestedException,
828 *q;
829
830 MagickCore::ExceptionType
831 severity;
832
833 size_t
834 index;
835
836 std::string
837 message;
838
839 // Just return if there is no reported error
840 if (exception_->severity == MagickCore::UndefinedException)
841 return;
842
843 message=formatExceptionMessage(exception_);
844 nestedException=(Exception *) NULL;
845 LockSemaphoreInfo(exception_->semaphore);
846 if (exception_->exceptions != (void *) NULL)
847 {
848 index=GetNumberOfElementsInLinkedList((LinkedListInfo *)
849 exception_->exceptions);
850 while(index > 0)
851 {
852 p=(const ExceptionInfo *) GetValueFromLinkedList((LinkedListInfo *)
853 exception_->exceptions,--index);
854 if ((p->severity != exception_->severity) || (LocaleCompare(p->reason,
855 exception_->reason) != 0) || (LocaleCompare(p->description,
856 exception_->description) != 0))
857 {
858 if (nestedException == (Exception *) NULL)
859 nestedException=createException(p);
860 else
861 {
862 q=createException(p);
863 nestedException->nested(q);
864 nestedException=q;
865 }
866 }
867 }
868 }
869 severity=exception_->severity;
870 UnlockSemaphoreInfo(exception_->semaphore);
871
872 if ((quiet_) && (severity < MagickCore::ErrorException))
873 {
874 delete nestedException;
875 return;
876 }
877
878 DestroyExceptionInfo(exception_);
879
880 switch (severity)
881 {
882 case MagickCore::BlobError:
883 case MagickCore::BlobFatalError:
884 throw ErrorBlob(message,nestedException);
885 case MagickCore::BlobWarning:
886 throw WarningBlob(message,nestedException);
887 case MagickCore::CacheError:
888 case MagickCore::CacheFatalError:
889 throw ErrorCache(message,nestedException);
890 case MagickCore::CacheWarning:
891 throw WarningCache(message,nestedException);
892 case MagickCore::CoderError:
893 case MagickCore::CoderFatalError:
894 throw ErrorCoder(message,nestedException);
895 case MagickCore::CoderWarning:
896 throw WarningCoder(message,nestedException);
897 case MagickCore::ConfigureError:
898 case MagickCore::ConfigureFatalError:
899 throw ErrorConfigure(message,nestedException);
900 case MagickCore::ConfigureWarning:
901 throw WarningConfigure(message,nestedException);
902 case MagickCore::CorruptImageError:
903 case MagickCore::CorruptImageFatalError:
904 throw ErrorCorruptImage(message,nestedException);
905 case MagickCore::CorruptImageWarning:
906 throw WarningCorruptImage(message,nestedException);
907 case MagickCore::DelegateError:
908 case MagickCore::DelegateFatalError:
909 throw ErrorDelegate(message,nestedException);
910 case MagickCore::DelegateWarning:
911 throw WarningDelegate(message,nestedException);
912 case MagickCore::DrawError:
913 case MagickCore::DrawFatalError:
914 throw ErrorDraw(message,nestedException);
915 case MagickCore::DrawWarning:
916 throw WarningDraw(message,nestedException);
917 case MagickCore::FileOpenError:
918 case MagickCore::FileOpenFatalError:
919 throw ErrorFileOpen(message,nestedException);
920 case MagickCore::FileOpenWarning:
921 throw WarningFileOpen(message,nestedException);
922 case MagickCore::ImageError:
923 case MagickCore::ImageFatalError:
924 throw ErrorImage(message,nestedException);
925 case MagickCore::ImageWarning:
926 throw WarningImage(message,nestedException);
927 case MagickCore::MissingDelegateError:
928 case MagickCore::MissingDelegateFatalError:
929 throw ErrorMissingDelegate(message,nestedException);
930 case MagickCore::MissingDelegateWarning:
931 throw WarningMissingDelegate(message,nestedException);
932 case MagickCore::ModuleError:
933 case MagickCore::ModuleFatalError:
934 throw ErrorModule(message,nestedException);
935 case MagickCore::ModuleWarning:
936 throw WarningModule(message,nestedException);
937 case MagickCore::MonitorError:
938 case MagickCore::MonitorFatalError:
939 throw ErrorMonitor(message,nestedException);
940 case MagickCore::MonitorWarning:
941 throw WarningMonitor(message,nestedException);
942 case MagickCore::OptionError:
943 case MagickCore::OptionFatalError:
944 throw ErrorOption(message,nestedException);
945 case MagickCore::OptionWarning:
946 throw WarningOption(message,nestedException);
947 case MagickCore::PolicyWarning:
948 throw WarningPolicy(message,nestedException);
949 case MagickCore::PolicyError:
950 case MagickCore::PolicyFatalError:
951 throw ErrorPolicy(message,nestedException);
952 case MagickCore::RegistryError:
953 case MagickCore::RegistryFatalError:
954 throw ErrorRegistry(message,nestedException);
955 case MagickCore::RegistryWarning:
956 throw WarningRegistry(message,nestedException);
957 case MagickCore::ResourceLimitError:
958 case MagickCore::ResourceLimitFatalError:
959 throw ErrorResourceLimit(message,nestedException);
960 case MagickCore::ResourceLimitWarning:
961 throw WarningResourceLimit(message,nestedException);
962 case MagickCore::StreamError:
963 case MagickCore::StreamFatalError:
964 throw ErrorStream(message,nestedException);
965 case MagickCore::StreamWarning:
966 throw WarningStream(message,nestedException);
967 case MagickCore::TypeError:
968 case MagickCore::TypeFatalError:
969 throw ErrorType(message,nestedException);
970 case MagickCore::TypeWarning:
971 throw WarningType(message,nestedException);
972 case MagickCore::UndefinedException:
973 default:
974 throw ErrorUndefined(message,nestedException);
975 case MagickCore::XServerError:
976 case MagickCore::XServerFatalError:
977 throw ErrorXServer(message,nestedException);
978 case MagickCore::XServerWarning:
979 throw WarningXServer(message,nestedException);
980 }
981 }