⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 error_code.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//  error_code support implementation file  ----------------------------------////  Copyright Beman Dawes 2002, 2006//  Distributed under the Boost Software License, Version 1.0. (See accompanying//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//  See library home page at http://www.boost.org/libs/system//----------------------------------------------------------------------------//#include <boost/config/warning_disable.hpp>// define BOOST_SYSTEM_SOURCE so that <boost/system/config.hpp> knows// the library is being built (possibly exporting rather than importing code)#define BOOST_SYSTEM_SOURCE #include <boost/system/config.hpp>#include <boost/system/error_code.hpp>#include <boost/cerrno.hpp>#include <vector>#include <cstdlib>#include <cassert>using namespace boost::system;using namespace boost::system::posix_error;#include <cstring> // for strerror/strerror_r# if defined( BOOST_WINDOWS_API )#   include <windows.h>#   ifndef ERROR_INCORRECT_SIZE#    define ERROR_INCORRECT_SIZE ERROR_BAD_ARGUMENTS#   endif# endif//----------------------------------------------------------------------------//namespace{  //  standard error categories  ---------------------------------------------//  class generic_error_category : public error_category  {  public:    generic_error_category(){}    const char *   name() const;    std::string    message( int ev ) const;  };  class system_error_category : public error_category  {  public:    system_error_category(){}    const char *        name() const;    std::string         message( int ev ) const;    error_condition     default_error_condition( int ev ) const;  };  //  generic_error_category implementation  ---------------------------------//  const char * generic_error_category::name() const  {    return "generic";  }  std::string generic_error_category::message( int ev ) const  {    static std::string unknown_err( "Unknown error" );  // strerror_r is preferred because it is always thread safe,  // however, we fallback to strerror in certain cases because:  //   -- Windows doesn't provide strerror_r.  //   -- HP and Sundo provide strerror_r on newer systems, but there is  //      no way to tell if is available at runtime and in any case their  //      versions of strerror are thread safe anyhow.  //   -- Linux only sometimes provides strerror_r.  //   -- Tru64 provides strerror_r only when compiled -pthread.  //   -- VMS doesn't provide strerror_r, but on this platform, strerror is  //      thread safe.  # if defined(BOOST_WINDOWS_API) || defined(__hpux) || defined(__sun)\     || (defined(__linux) && (!defined(__USE_XOPEN2K) || defined(BOOST_SYSTEM_USE_STRERROR)))\     || (defined(__osf__) && !defined(_REENTRANT))\     || (defined(__vms))      const char * c_str = std::strerror( ev );      return  c_str        ? std::string( c_str )        : unknown_err;  # else  // use strerror_r      char buf[64];      char * bp = buf;      std::size_t sz = sizeof(buf);  #  if defined(__CYGWIN__) || defined(__USE_GNU)      // Oddball version of strerror_r      const char * c_str = strerror_r( ev, bp, sz );      return  c_str        ? std::string( c_str )        : unknown_err;  #  else      // POSIX version of strerror_r      int result;      for (;;)      {        // strerror_r returns 0 on success, otherwise ERANGE if buffer too small,        // invalid_argument if ev not a valid error number  #  if defined (__sgi)        const char * c_str = strerror( ev );        result = 0;      return  c_str        ? std::string( c_str )        : unknown_err;  #  else        result = strerror_r( ev, bp, sz );  #  endif        if (result == 0 )          break;        else        {  #  if defined(__linux)          // Linux strerror_r returns -1 on error, with error number in errno          result = errno;  #  endif          if ( result !=  ERANGE ) break;          if ( sz > sizeof(buf) ) std::free( bp );          sz *= 2;          if ( (bp = static_cast<char*>(std::malloc( sz ))) == 0 )            return std::string( "ENOMEM" );        }      }      std::string msg;      try      {        msg = ( ( result == invalid_argument ) ? "Unknown error" : bp );      }#   ifndef BOOST_NO_EXCEPTIONS      // See ticket #2098      catch(...)      {        // just eat the exception      }#   endif      if ( sz > sizeof(buf) ) std::free( bp );      sz = 0;      return msg;  #  endif   // else POSIX version of strerror_r  # endif  // else use strerror_r  }  //  system_error_category implementation  --------------------------------//   const char * system_error_category::name() const  {    return "system";  }  error_condition system_error_category::default_error_condition( int ev ) const  {    switch ( ev )    {    case 0: return make_error_condition( success );  # if defined(BOOST_POSIX_API)    // POSIX-like O/S -> posix_errno decode table  ---------------------------//    case E2BIG: return make_error_condition( argument_list_too_long );    case EACCES: return make_error_condition( permission_denied );    case EADDRINUSE: return make_error_condition( address_in_use );    case EADDRNOTAVAIL: return make_error_condition( address_not_available );    case EAFNOSUPPORT: return make_error_condition( address_family_not_supported );    case EAGAIN: return make_error_condition( resource_unavailable_try_again );#   if EALREADY != EBUSY  //  EALREADY and EBUSY are the same on QNX Neutrino    case EALREADY: return make_error_condition( connection_already_in_progress );#   endif    case EBADF: return make_error_condition( bad_file_descriptor );    case EBADMSG: return make_error_condition( bad_message );    case EBUSY: return make_error_condition( device_or_resource_busy );    case ECANCELED: return make_error_condition( operation_canceled );    case ECHILD: return make_error_condition( no_child_process );    case ECONNABORTED: return make_error_condition( connection_aborted );    case ECONNREFUSED: return make_error_condition( connection_refused );    case ECONNRESET: return make_error_condition( connection_reset );    case EDEADLK: return make_error_condition( resource_deadlock_would_occur );    case EDESTADDRREQ: return make_error_condition( destination_address_required );    case EDOM: return make_error_condition( argument_out_of_domain );    case EEXIST: return make_error_condition( file_exists );    case EFAULT: return make_error_condition( bad_address );    case EFBIG: return make_error_condition( file_too_large );    case EHOSTUNREACH: return make_error_condition( host_unreachable );    case EIDRM: return make_error_condition( identifier_removed );    case EILSEQ: return make_error_condition( illegal_byte_sequence );    case EINPROGRESS: return make_error_condition( operation_in_progress );    case EINTR: return make_error_condition( interrupted );    case EINVAL: return make_error_condition( invalid_argument );    case EIO: return make_error_condition( io_error );    case EISCONN: return make_error_condition( already_connected );    case EISDIR: return make_error_condition( is_a_directory );    case ELOOP: return make_error_condition( too_many_synbolic_link_levels );    case EMFILE: return make_error_condition( too_many_files_open );    case EMLINK: return make_error_condition( too_many_links );    case EMSGSIZE: return make_error_condition( message_size );    case ENAMETOOLONG: return make_error_condition( filename_too_long );    case ENETDOWN: return make_error_condition( network_down );    case ENETRESET: return make_error_condition( network_reset );    case ENETUNREACH: return make_error_condition( network_unreachable );    case ENFILE: return make_error_condition( too_many_files_open_in_system );    case ENOBUFS: return make_error_condition( no_buffer_space );    case ENODATA: return make_error_condition( no_message_available );    case ENODEV: return make_error_condition( no_such_device );    case ENOENT: return make_error_condition( no_such_file_or_directory );    case ENOEXEC: return make_error_condition( executable_format_error );    case ENOLCK: return make_error_condition( no_lock_available );    case ENOLINK: return make_error_condition( no_link );    case ENOMEM: return make_error_condition( not_enough_memory );    case ENOMSG: return make_error_condition( no_message );    case ENOPROTOOPT: return make_error_condition( no_protocol_option );    case ENOSPC: return make_error_condition( no_space_on_device );    case ENOSR: return make_error_condition( no_stream_resources );    case ENOSTR: return make_error_condition( not_a_stream );    case ENOSYS: return make_error_condition( function_not_supported );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -