//  boost/system/cygwin_error.hpp  -------------------------------------------//

//  Copyright Beman Dawes 2007

//  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

#ifndef BOOST_CYGWIN_ERROR_HPP
#define BOOST_CYGWIN_ERROR_HPP

//  This header is effectively empty for compiles on operating systems where
//  it is not applicable.

# ifdef __CYGWIN__

#include <boost/system/error_code.hpp>

namespace boost
{
  namespace system
  {
    //  To construct an error_code after a API error:
    //
    //      error_code( errno, system_category() )

    //  User code should use the portable "posix" enums for POSIX errors; this
    //  allows such code to be portable to non-POSIX systems. For the non-POSIX
    //  errno values that POSIX-based systems typically provide in addition to 
    //  POSIX values, use the system specific enums below.

   namespace cygwin_error
    {
      enum cygwin_errno
      {
        no_net = ENONET,
        no_package = ENOPKG,
        no_share = ENOSHARE
      };
    }  // namespace cygwin_error

    template<> struct is_error_code_enum<cygwin_error::cygwin_errno>
      { static const bool value = true; };

    namespace cygwin_error
    {
      inline error_code make_error_code( cygwin_errno e )
        { return error_code( e, system_category() ); }
    }
  }
}

#endif  // __CYGWIN__

#endif  // BOOST_CYGWIN_ERROR_HPP
