//===---------------------- system_error.cpp ------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This was lifted from libc++ and modified for C++03. // //===----------------------------------------------------------------------===// #include "llvm/Support/system_error.h" #include "llvm/Support/Errno.h" #include #include namespace llvm { // class error_category error_category::error_category() { } error_category::~error_category() { } error_condition error_category::default_error_condition(int ev) const { return error_condition(ev, *this); } bool error_category::equivalent(int code, const error_condition& condition) const { return default_error_condition(code) == condition; } bool error_category::equivalent(const error_code& code, int condition) const { return *this == code.category() && code.value() == condition; } std::string _do_message::message(int ev) const { return std::string(sys::StrError(ev)); } class _generic_error_category : public _do_message { public: virtual const char* name() const LLVM_OVERRIDE; virtual std::string message(int ev) const LLVM_OVERRIDE; }; const char* _generic_error_category::name() const { return "generic"; } std::string _generic_error_category::message(int ev) const { #ifdef ELAST if (ev > ELAST) return std::string("unspecified generic_category error"); #endif // ELAST return _do_message::message(ev); } const error_category& generic_category() { static _generic_error_category s; return s; } class _system_error_category : public _do_message { public: virtual const char* name() const LLVM_OVERRIDE; virtual std::string message(int ev) const LLVM_OVERRIDE; virtual error_condition default_error_condition(int ev) const LLVM_OVERRIDE; }; const char* _system_error_category::name() const { return "system"; } // std::string _system_error_category::message(int ev) const { // Is in Platform/system_error.inc // error_condition _system_error_category::default_error_condition(int ev) const // Is in Platform/system_error.inc const error_category& system_category() { static _system_error_category s; return s; } const error_category& posix_category() { #ifdef LLVM_ON_WIN32 return generic_category(); #else return system_category(); #endif } // error_condition std::string error_condition::message() const { return _cat_->message(_val_); } // error_code std::string error_code::message() const { return _cat_->message(_val_); } } // end namespace llvm // Include the truly platform-specific parts of this class. #if defined(LLVM_ON_UNIX) #include "Unix/system_error.inc" #endif #if defined(LLVM_ON_WIN32) #include "Windows/system_error.inc" #endif