diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-10-19 23:30:04 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-10-19 23:30:04 +0100 |
| commit | 6ea37804a7f9dd72a29a25e7594a39fa47f53192 (patch) | |
| tree | b78bfdc3ef2ba3d61dfb3ce0930f741ec92548a3 /src | |
| parent | f6b789850b0cd50971707084632c4ec08e145d0f (diff) | |
Use std::runtime_error instead of our own StringError as
a) it does the same job and
b) its type and what() survive the boundary between the libdcp .so
and the main DCP-o-matic executable.
Before this StringError-derived exceptions caught by DCP-o-matic
were only recognised as std::exceptions (without the what()) message.
I don't know why this happens, but this works around it.
Diffstat (limited to 'src')
| -rw-r--r-- | src/certificate_chain.cc | 3 | ||||
| -rw-r--r-- | src/exceptions.cc | 35 | ||||
| -rw-r--r-- | src/exceptions.h | 51 |
3 files changed, 25 insertions, 64 deletions
diff --git a/src/certificate_chain.cc b/src/certificate_chain.cc index c0bfd52f..b37c07bf 100644 --- a/src/certificate_chain.cc +++ b/src/certificate_chain.cc @@ -46,6 +46,7 @@ using std::string; using std::ofstream; using std::ifstream; +using std::runtime_error; using std::stringstream; using namespace dcp; @@ -535,7 +536,7 @@ CertificateChain::add_signature_value (xmlpp::Node* parent, string ns) const ); if (signature_context->signKey == 0) { - throw StringError ("could not read private key"); + throw runtime_error ("could not read private key"); } /* XXX: set key name to the PEM string: this can't be right! */ diff --git a/src/exceptions.cc b/src/exceptions.cc index e1eaa52e..c588696e 100644 --- a/src/exceptions.cc +++ b/src/exceptions.cc @@ -25,10 +25,11 @@ #include "compose.hpp" using std::string; +using std::runtime_error; using namespace dcp; FileError::FileError (string message, boost::filesystem::path filename, int number) - : StringError (String::compose ("%1 (%2) (error %3)", message, filename.string(), number)) + : runtime_error (String::compose ("%1 (%2) (error %3)", message, filename.string(), number)) , _filename (filename) , _number (number) { @@ -36,48 +37,36 @@ FileError::FileError (string message, boost::filesystem::path filename, int numb } UnresolvedRefError::UnresolvedRefError (string id) - : StringError (String::compose ("Unresolved reference to asset id %1", id)) + : runtime_error (String::compose ("Unresolved reference to asset id %1", id)) { } TimeFormatError::TimeFormatError (string bad_time) - : StringError (String::compose ("Bad time string %1", bad_time)) + : runtime_error (String::compose ("Bad time string %1", bad_time)) { } MissingAssetError::MissingAssetError (boost::filesystem::path path, AssetType type) - : _path (path) - , _type (type) + : DCPReadError ( + type == MAIN_PICTURE ? String::compose ("missing asset %1 for main picture", path.string()) : + (type == MAIN_SOUND ? String::compose ("missing asset %1 for main sound", path.string()) : + (type == MAIN_SUBTITLE ? String::compose ("missing asset %1 for main subtitle", path.string()) : + String::compose ("missing asset %1", path.string())))) { - string type_name; - switch (_type) { - case MAIN_PICTURE: - type_name = " for main picture"; - break; - case MAIN_SOUND: - type_name = " for main sound"; - break; - case MAIN_SUBTITLE: - type_name = " for main subtitle"; - break; - case UNKNOWN: - break; - } - - _message = String::compose ("Missing asset %1%2", path.string(), type_name); + } NotEncryptedError::NotEncryptedError (string const & what) - : StringError (String::compose ("%1 is not encrypted", what)) + : runtime_error (String::compose ("%1 is not encrypted", what)) { } ProgrammingError::ProgrammingError (string file, int line) - : StringError (String::compose ("Programming error at %1:%2", file, line)) + : runtime_error (String::compose ("Programming error at %1:%2", file, line)) { } diff --git a/src/exceptions.h b/src/exceptions.h index 01ac9ccc..801bfb01 100644 --- a/src/exceptions.h +++ b/src/exceptions.h @@ -29,32 +29,10 @@ namespace dcp { -/** @class StringError - * @brief An exception that uses a std::string to store its error message. - */ -class StringError : public std::exception -{ -public: - StringError () {} - StringError (std::string message) - : _message (message) - {} - - ~StringError () throw () {} - - /** @return error message */ - char const * what () const throw () { - return _message.c_str (); - } - -protected: - std::string _message; -}; - /** @class FileError * @brief An exception related to a file */ -class FileError : public StringError +class FileError : public std::runtime_error { public: FileError (std::string message, boost::filesystem::path filename, int number); @@ -90,26 +68,23 @@ public: /** @class MiscError * @brief A miscellaneous exception */ -class MiscError : public StringError +class MiscError : public std::runtime_error { public: MiscError (std::string message) - : StringError (message) + : std::runtime_error (message) {} }; /** @class DCPReadError * @brief A DCP read exception */ -class DCPReadError : public StringError +class DCPReadError : public std::runtime_error { public: DCPReadError (std::string message) - : StringError (message) + : std::runtime_error (message) {} - -protected: - DCPReadError () {} }; /** @class MissingAssetError @@ -127,27 +102,23 @@ public: MissingAssetError (boost::filesystem::path, AssetType = UNKNOWN); ~MissingAssetError () throw () {} - -private: - boost::filesystem::path _path; - AssetType _type; }; /** @class XMLError * @brief An XML error */ -class XMLError : public StringError +class XMLError : public std::runtime_error { public: XMLError (std::string message) - : StringError (message) + : std::runtime_error (message) {} }; /** @class UnresolvedRefError * @brief An exception caused by a reference (by UUID) to something which is not known */ -class UnresolvedRefError : public StringError +class UnresolvedRefError : public std::runtime_error { public: UnresolvedRefError (std::string id); @@ -156,7 +127,7 @@ public: /** @class TimeFormatError * @brief A an error with a string passed to LocalTime. */ -class TimeFormatError : public StringError +class TimeFormatError : public std::runtime_error { public: TimeFormatError (std::string bad_time); @@ -166,7 +137,7 @@ public: * @brief An error raised when creating a DecryptedKDM object for assets that are not * encrypted. */ -class NotEncryptedError : public StringError +class NotEncryptedError : public std::runtime_error { public: NotEncryptedError (std::string const & what); @@ -176,7 +147,7 @@ public: /** @class ProgrammingError * @brief An exception thrown when a DCP_ASSERT fails; something that should not happen. */ -class ProgrammingError : public StringError +class ProgrammingError : public std::runtime_error { public: ProgrammingError (std::string file, int line); |
