From 27d1e03d7bdf8fcfe7292c06e40bc3e2fca9158e Mon Sep 17 00:00:00 2001 From: Denis Oliver Kropp Date: Tue, 19 Oct 2010 15:56:15 +0200 Subject: pluggit --- src/Exception.cxx | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/Exception.cxx (limited to 'src/Exception.cxx') diff --git a/src/Exception.cxx b/src/Exception.cxx new file mode 100644 index 0000000..2d19769 --- /dev/null +++ b/src/Exception.cxx @@ -0,0 +1,59 @@ +namespace PluggIt { + +class Exception +{ + private string m_message; + + + public Exception( string message ) { + m_message = message; + } + + public Exception( const char *format, ... ) D_FORMAT_PRINTF(2) { + va_list args; + int len; + char buf[200]; + char *ptr = buf; + + va_start( args, format ); + len = vsnprintf( buf, sizeof(buf), format, args ); + va_end( args ); + + if (len < 0) + abort(); + + if (len >= (int)sizeof(buf)) { + ptr = (char*) malloc( len+1 ); + if (!ptr) + abort(); + + va_start( args, format ); + len = vsnprintf( ptr, len+1, format, args ); + va_end( args ); + + if (len < 0) { + free( ptr ); + abort(); + } + } + + m_message = string( ptr ); + + if (ptr != buf) + free( ptr ); + } + + public string getMessage() { + return m_message; + } + + + friend std::ostream &operator << (std::ostream &stream, Exception *ex) { + stream << ex->getMessage(); + + return stream; + } +}; + +} + -- cgit