563 lines
11 KiB
C++
563 lines
11 KiB
C++
// This may look like C code, but it is really -*- C++ -*-
|
|
//
|
|
// Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
|
|
//
|
|
// Implementation of Exception and derived classes
|
|
//
|
|
|
|
#define MAGICKCORE_IMPLEMENTATION 1
|
|
#define MAGICK_PLUSPLUS_IMPLEMENTATION 1
|
|
|
|
#include "Magick++/Include.h"
|
|
#include <string>
|
|
#include <errno.h>
|
|
#include <string.h>
|
|
|
|
using namespace std;
|
|
|
|
#include "Magick++/Exception.h"
|
|
|
|
// Construct with message string
|
|
Magick::Exception::Exception( const std::string& what_ )
|
|
: std::exception(),
|
|
_what(what_)
|
|
{
|
|
}
|
|
|
|
// Copy constructor
|
|
Magick::Exception::Exception( const Magick::Exception& original_ )
|
|
: exception(original_),
|
|
_what(original_._what)
|
|
{
|
|
}
|
|
|
|
// Assignment operator
|
|
Magick::Exception& Magick::Exception::operator= (const Magick::Exception& original_ )
|
|
{
|
|
if(this != &original_)
|
|
{
|
|
this->_what = original_._what;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// Return message string
|
|
/*virtual*/ const char* Magick::Exception::what( ) const throw()
|
|
{
|
|
return _what.c_str();
|
|
}
|
|
|
|
/* Destructor */
|
|
/*virtual*/ Magick::Exception::~Exception ( ) throw ()
|
|
{
|
|
}
|
|
|
|
//
|
|
// Warnings
|
|
//
|
|
|
|
Magick::Warning::Warning ( const std::string& what_ )
|
|
: Exception(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::Warning::~Warning ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningUndefined::WarningUndefined ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningUndefined::~WarningUndefined ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningBlob::WarningBlob ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningBlob::~WarningBlob ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningCache::WarningCache ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningCache::~WarningCache ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningCoder::WarningCoder ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningCoder::~WarningCoder ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningConfigure::WarningConfigure ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningConfigure::~WarningConfigure ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningCorruptImage::WarningCorruptImage ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningCorruptImage::~WarningCorruptImage ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningDelegate::WarningDelegate ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningDelegate::~WarningDelegate ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningDraw::WarningDraw ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningDraw::~WarningDraw ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningFileOpen::WarningFileOpen ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningFileOpen::~WarningFileOpen ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningImage::WarningImage ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningImage::~WarningImage ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningMissingDelegate::WarningMissingDelegate ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningMissingDelegate::~WarningMissingDelegate ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningModule::WarningModule ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningModule::~WarningModule ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningMonitor::WarningMonitor ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningMonitor::~WarningMonitor ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningOption::WarningOption ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningOption::~WarningOption ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningRegistry::WarningRegistry ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningRegistry::~WarningRegistry ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningResourceLimit::WarningResourceLimit ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningResourceLimit::~WarningResourceLimit ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningStream::WarningStream ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningStream::~WarningStream ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningType::WarningType ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningType::~WarningType ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::WarningXServer::WarningXServer ( const std::string& what_ )
|
|
: Warning(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::WarningXServer::~WarningXServer ( ) throw ()
|
|
{
|
|
}
|
|
|
|
//
|
|
// Errors
|
|
//
|
|
|
|
Magick::Error::Error ( const std::string& what_ )
|
|
: Exception(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::Error::~Error ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorUndefined::ErrorUndefined ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorUndefined::~ErrorUndefined ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorBlob::ErrorBlob ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorBlob::~ErrorBlob ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorCache::ErrorCache ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorCache::~ErrorCache ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorCoder::ErrorCoder ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorCoder::~ErrorCoder ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorConfigure::ErrorConfigure ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorConfigure::~ErrorConfigure ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorCorruptImage::ErrorCorruptImage ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorCorruptImage::~ErrorCorruptImage ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorDelegate::ErrorDelegate ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorDelegate::~ErrorDelegate ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorDraw::ErrorDraw ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorDraw::~ErrorDraw ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorFileOpen::ErrorFileOpen ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorFileOpen::~ErrorFileOpen ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorImage::ErrorImage ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorImage::~ErrorImage ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorMissingDelegate::ErrorMissingDelegate ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorMissingDelegate::~ErrorMissingDelegate ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorModule::ErrorModule ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorModule::~ErrorModule ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorMonitor::ErrorMonitor ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorMonitor::~ErrorMonitor ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorOption::ErrorOption ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorOption::~ErrorOption ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorRegistry::ErrorRegistry ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorRegistry::~ErrorRegistry ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorResourceLimit::ErrorResourceLimit ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorResourceLimit::~ErrorResourceLimit ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorStream::ErrorStream ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorStream::~ErrorStream ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorType::ErrorType ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorType::~ErrorType ( ) throw ()
|
|
{
|
|
}
|
|
|
|
Magick::ErrorXServer::ErrorXServer ( const std::string& what_ )
|
|
: Error(what_)
|
|
{
|
|
}
|
|
|
|
/*virtual*/ Magick::ErrorXServer::~ErrorXServer ( ) throw ()
|
|
{
|
|
}
|
|
|
|
// Format and throw exception
|
|
MagickPPExport void Magick::throwExceptionExplicit( const ExceptionType severity_,
|
|
const char* reason_,
|
|
const char* description_)
|
|
{
|
|
// Just return if there is no reported error
|
|
if ( severity_ == UndefinedException )
|
|
return;
|
|
|
|
ExceptionInfo exception;
|
|
|
|
GetExceptionInfo( &exception );
|
|
ThrowException( &exception, severity_, reason_, description_ );
|
|
throwException( exception );
|
|
(void) DestroyExceptionInfo( &exception );
|
|
}
|
|
|
|
// Throw C++ exception
|
|
MagickPPExport void Magick::throwException( ExceptionInfo &exception_ )
|
|
{
|
|
// Just return if there is no reported error
|
|
if ( exception_.severity == UndefinedException )
|
|
return;
|
|
|
|
// Format error message ImageMagick-style
|
|
std::string message = SetClientName(0);
|
|
if ( exception_.reason != 0 )
|
|
{
|
|
message += std::string(": ");
|
|
message += std::string(exception_.reason);
|
|
}
|
|
|
|
if ( exception_.description != 0 )
|
|
message += " (" + std::string(exception_.description) + ")";
|
|
|
|
ExceptionType severity = exception_.severity;
|
|
MagickBooleanType relinquish = exception_.relinquish;
|
|
DestroyExceptionInfo( &exception_ );
|
|
if (relinquish)
|
|
GetExceptionInfo( &exception_ );
|
|
|
|
switch ( severity )
|
|
{
|
|
// Warnings
|
|
case ResourceLimitWarning :
|
|
throw WarningResourceLimit( message );
|
|
case TypeWarning :
|
|
throw WarningType( message );
|
|
case OptionWarning :
|
|
throw WarningOption( message );
|
|
case DelegateWarning :
|
|
throw WarningDelegate( message );
|
|
case MissingDelegateWarning :
|
|
throw WarningMissingDelegate( message );
|
|
case CorruptImageWarning :
|
|
throw WarningCorruptImage( message );
|
|
case FileOpenWarning :
|
|
throw WarningFileOpen( message );
|
|
case BlobWarning :
|
|
throw WarningBlob ( message );
|
|
case StreamWarning :
|
|
throw WarningStream ( message );
|
|
case CacheWarning :
|
|
throw WarningCache ( message );
|
|
case CoderWarning :
|
|
throw WarningCoder ( message );
|
|
case ModuleWarning :
|
|
throw WarningModule( message );
|
|
case DrawWarning :
|
|
throw WarningDraw( message );
|
|
case ImageWarning :
|
|
throw WarningImage( message );
|
|
case XServerWarning :
|
|
throw WarningXServer( message );
|
|
case MonitorWarning :
|
|
throw WarningMonitor( message );
|
|
case RegistryWarning :
|
|
throw WarningRegistry( message );
|
|
case ConfigureWarning :
|
|
throw WarningConfigure( message );
|
|
// Errors
|
|
case ResourceLimitError :
|
|
case ResourceLimitFatalError :
|
|
throw ErrorResourceLimit( message );
|
|
case TypeError :
|
|
case TypeFatalError :
|
|
throw ErrorType( message );
|
|
case OptionError :
|
|
case OptionFatalError :
|
|
throw ErrorOption( message );
|
|
case DelegateError :
|
|
case DelegateFatalError :
|
|
throw ErrorDelegate( message );
|
|
case MissingDelegateError :
|
|
case MissingDelegateFatalError :
|
|
throw ErrorMissingDelegate( message );
|
|
case CorruptImageError :
|
|
case CorruptImageFatalError :
|
|
throw ErrorCorruptImage( message );
|
|
case FileOpenError :
|
|
case FileOpenFatalError :
|
|
throw ErrorFileOpen( message );
|
|
case BlobError :
|
|
case BlobFatalError :
|
|
throw ErrorBlob ( message );
|
|
case StreamError :
|
|
case StreamFatalError :
|
|
throw ErrorStream ( message );
|
|
case CacheError :
|
|
case CacheFatalError :
|
|
throw ErrorCache ( message );
|
|
case CoderError :
|
|
case CoderFatalError :
|
|
throw ErrorCoder ( message );
|
|
case ModuleError :
|
|
case ModuleFatalError :
|
|
throw ErrorModule ( message );
|
|
case DrawError :
|
|
case DrawFatalError :
|
|
throw ErrorDraw ( message );
|
|
case ImageError :
|
|
case ImageFatalError :
|
|
throw ErrorImage ( message );
|
|
case XServerError :
|
|
case XServerFatalError :
|
|
throw ErrorXServer ( message );
|
|
case MonitorError :
|
|
case MonitorFatalError :
|
|
throw ErrorMonitor ( message );
|
|
case RegistryError :
|
|
case RegistryFatalError :
|
|
throw ErrorRegistry ( message );
|
|
case ConfigureError :
|
|
case ConfigureFatalError :
|
|
throw ErrorConfigure ( message );
|
|
case UndefinedException :
|
|
default :
|
|
throw ErrorUndefined( message );
|
|
}
|
|
|
|
}
|