/*
 * Copyright (c) 1999
 * Boris Fomitchev
 *
 * This material is provided "as is", with absolutely no warranty expressed
 * or implied. Any use is at your own risk.
 *
 * Permission to use or copy this software for any purpose is hereby granted
 * without fee, provided the above notices are retained on all copies.
 * Permission to modify the code and to distribute modified code is granted,
 * provided the above notices are retained, and a notice that the code was
 * modified is included with the above copyright notice.
 *
 */

#ifndef _STLP_CERRNO
#define _STLP_CERRNO

#ifndef _STLP_OUTERMOST_HEADER_ID
#  define _STLP_OUTERMOST_HEADER_ID 0x105
#  include <stl/_prolog.h>
#endif

#ifndef _STLP_WCE
#  if defined (_STLP_USE_NEW_C_HEADERS)
#    if defined (_STLP_HAS_INCLUDE_NEXT)
#      include_next <cerrno>
#    else
#      include _STLP_NATIVE_CPP_C_HEADER(cerrno)
#    endif
#  else
#    include <errno.h>
#  endif
#endif

#ifndef errno /* errno is not a macro */
#  if defined (_STLP_IMPORT_VENDOR_CSTD)
#      if !defined (__IBMCPP__) && !defined (__hpux) && !defined (__MWERKS__) && !defined (_STLP_WCE)
_STLP_BEGIN_NAMESPACE
using _STLP_VENDOR_CSTD::errno;
_STLP_END_NAMESPACE
#      endif
#  endif
#endif

#if (_STLP_OUTERMOST_HEADER_ID == 0x105 )
#  include <stl/_epilog.h>
#  undef _STLP_OUTERMOST_HEADER_ID
#endif

#endif /* _STLP_CERRNO */

// Local Variables:
// mode:C++
// End:
