LCOV - code coverage report
Current view: top level - usr/include/boost/system/detail - generic_category.hpp (source / functions) Hit Total Coverage
Test: ROSE Lines: 0 7 0.0 %
Date: 2022-12-08 13:48:47 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Implementation details of generic_error_category
       2             : //
       3             : // Copyright 2018 Peter Dimov
       4             : //
       5             : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       6             : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       7             : //
       8             : // See library home page at http://www.boost.org/libs/system
       9             : 
      10             : #include <cstring>
      11             : 
      12             : namespace boost
      13             : {
      14             : 
      15             : namespace system
      16             : {
      17             : 
      18             : namespace detail
      19             : {
      20             : 
      21             : #if defined(__GLIBC__)
      22             : 
      23             : // glibc has two incompatible strerror_r definitions
      24             : 
      25           0 : inline char const * strerror_r_helper( char const * r, char const * ) BOOST_NOEXCEPT
      26             : {
      27           0 :     return r;
      28             : }
      29             : 
      30             : inline char const * strerror_r_helper( int r, char const * buffer ) BOOST_NOEXCEPT
      31             : {
      32             :     return r == 0? buffer: "Unknown error";
      33             : }
      34             : 
      35           0 : inline char const * generic_error_category_message( int ev, char * buffer, std::size_t len ) BOOST_NOEXCEPT
      36             : {
      37           0 :     return strerror_r_helper( strerror_r( ev, buffer, len ), buffer );
      38             : }
      39             : 
      40           0 : inline std::string generic_error_category_message( int ev )
      41             : {
      42           0 :     char buffer[ 128 ];
      43           0 :     return generic_error_category_message( ev, buffer, sizeof( buffer ) );
      44             : }
      45             : 
      46             : #else
      47             : 
      48             : // std::strerror is thread-safe on everything else, incl. Windows
      49             : 
      50             : # if defined( BOOST_MSVC )
      51             : #  pragma warning( push )
      52             : #  pragma warning( disable: 4996 )
      53             : # elif defined(__clang__) && defined(__has_warning)
      54             : #  pragma clang diagnostic push
      55             : #  if __has_warning("-Wdeprecated-declarations")
      56             : #   pragma clang diagnostic ignored "-Wdeprecated-declarations"
      57             : #  endif
      58             : # endif
      59             : 
      60             : inline std::string generic_error_category_message( int ev )
      61             : {
      62             :     char const * m = std::strerror( ev );
      63             :     return m? m: "Unknown error";
      64             : }
      65             : 
      66             : inline char const * generic_error_category_message( int ev, char * buffer, std::size_t len ) BOOST_NOEXCEPT
      67             : {
      68             :     if( len == 0 )
      69             :     {
      70             :         return buffer;
      71             :     }
      72             : 
      73             :     if( len == 1 )
      74             :     {
      75             :         buffer[0] = 0;
      76             :         return buffer;
      77             :     }
      78             : 
      79             :     char const * m = std::strerror( ev );
      80             : 
      81             :     if( m == 0 ) return "Unknown error";
      82             : 
      83             :     std::strncpy( buffer, m, len - 1 );
      84             :     buffer[ len-1 ] = 0;
      85             : 
      86             :     return buffer;
      87             : }
      88             : 
      89             : # if defined( BOOST_MSVC )
      90             : #  pragma warning( pop )
      91             : # elif defined(__clang__) && defined(__has_warning)
      92             : #  pragma clang diagnostic pop
      93             : # endif
      94             : 
      95             : #endif
      96             : 
      97             : } // namespace detail
      98             : 
      99             : } // namespace system
     100             : 
     101             : } // namespace boost

Generated by: LCOV version 1.14