summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--include/opkele/exception.h8
-rw-r--r--lib/exception.cc10
2 files changed, 16 insertions, 2 deletions
diff --git a/include/opkele/exception.h b/include/opkele/exception.h
index 2ac0661..c5f5811 100644
--- a/include/opkele/exception.h
+++ b/include/opkele/exception.h
@@ -7,97 +7,101 @@
*/
#include <curl/curl.h>
#include <opkele/opkele-config.h>
#ifdef OPKELE_HAVE_KONFORKA
# include <konforka/exception.h>
/**
* the exception parameters declaration
*/
# define OPKELE_E_PARS const string& fi,const string&fu,int l,const string& w
/**
* the exception parameters list to pass to constructor
*/
# define OPKELE_E_CONS_ fi,fu,l,
/**
* the exception codepoint specification
*/
# define OPKELE_CP_ CODEPOINT,
/**
* the simple rethrow of konforka-based exception
*/
# define OPKELE_RETHROW catch(konforka::exception& e) { e.see(CODEPOINT); throw }
#else /* OPKELE_HAVE_KONFORKA */
-# include <stdexcept>
+# include <exception>
+# include <string>
/**
* the exception parameter declaration
*/
# define OPKELE_E_PARS const string& w
/**
* the dummy prefix for exception parameters list to prepend in the absence of
* konforka library
*/
# define OPKELE_E_CONS_
/**
* the dummy placeholder for konforka exception codepoint specification
*/
# define OPKELE_CP_
/**
* the dummy define for the konforka-based rethrow of exception
*/
# define OPKELE_RETHROW
#endif /* OPKELE_HAVE_KONFORKA */
/**
* the exception parameters list to pass to constructor
*/
# define OPKELE_E_CONS OPKELE_E_CONS_ w
/*
* @brief the main opkele namespace
*/
namespace opkele {
using std::string;
/**
* the base opkele exception class
*/
class exception : public
# ifdef OPKELE_HAVE_KONFORKA
konforka::exception
# else
std::exception
# endif
{
public:
# ifdef OPKELE_HAVE_KONFORKA
explicit
exception(const string& fi,const string& fu,int l,const string& w)
: konforka::exception(fi,fu,l,w) { }
# else /* OPKELE_HAVE_KONFORKA */
+ string _what;
explicit
exception(const string& w)
- : std::exception(w) { }
+ : _what(w) { }
+ virtual ~exception() throw();
+ virtual const char * what() const throw();
# endif /* OPKELE_HAVE_KONFORKA */
};
/**
* thrown in case of failed conversion
*/
class failed_conversion : public exception {
public:
failed_conversion(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* thrown in case of failed lookup (either parameter or persistent store)
*/
class failed_lookup : public exception {
public:
failed_lookup(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* thrown in case of bad input (either local or network)
*/
class bad_input : public exception {
public:
diff --git a/lib/exception.cc b/lib/exception.cc
index b7c1702..4fe6c87 100644
--- a/lib/exception.cc
+++ b/lib/exception.cc
@@ -1,22 +1,32 @@
#include <openssl/err.h>
#include <curl/curl.h>
#include <opkele/exception.h>
namespace opkele {
+# ifndef OPKELE_HAVE_KONFORKA
+
+ exception::~exception() throw() {
+ }
+ const char *exception::what() const throw() {
+ return _what.c_str();
+ }
+
+# endif
+
exception_openssl::exception_openssl(OPKELE_E_PARS)
: _error(ERR_peek_last_error()),
_ssl_string(ERR_error_string(_error,0)),
exception(OPKELE_E_CONS_ w+" ["+_ssl_string+']') {
}
exception_curl::exception_curl(OPKELE_E_PARS)
: _error(CURLE_OK),
exception_network(OPKELE_E_CONS) { }
exception_curl::exception_curl(OPKELE_E_PARS,CURLcode e)
: _error(e),
_curl_string(curl_easy_strerror(e)),
exception_network(OPKELE_E_CONS_ w+" ["+_curl_string+']') {
}
}