/* */ #include "Exception.h" #include namespace aria2 { Exception::Exception(const char* file, int line, const std::string& msg): file_(file), line_(line), errno_(0), msg_(msg) {} Exception::Exception(const char* file, int line, const std::string& msg, const Exception& cause): file_(file), line_(line), errno_(0), msg_(msg), cause_(cause.copy()) {} Exception::Exception(const char* file, int line, const Exception& e): file_(file), line_(line), errno_(0), msg_(e.msg_), cause_(e.cause_) {} Exception::Exception (const char* file, int line, int errnoArg, const std::string& msg): file_(file), line_(line), errno_(errnoArg), msg_(msg) {} Exception::~Exception() throw() {} std::string Exception::stackTrace() const { std::stringstream s; s << "Exception: " << "[" << file_ << ":" << line_ << "] "; if(errno_) { s << "errno=" << errno_ << " "; } s << what() << "\n"; SharedHandle e = cause_; while(e) { s << " -> " << "[" << e->file_ << ":" << e->line_ << "] " << e->what() << "\n"; e = e->cause_; } return s.str(); } } // namespace aria2