/*
 * 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)
#  include _STLP_NATIVE_CPP_C_HEADER(cerrno)
# else
#  include <errno.h>
# endif
# endif

#ifndef errno

# if defined (_STLP_IMPORT_VENDOR_CSTD) && \
  ! defined (__IBMCPP__) && ! defined(__hpux) && ! defined(__MWERKS__) && !defined(_STLP_WCE)
_STLP_BEGIN_NAMESPACE
using _STLP_VENDOR_CSTD::errno;
_STLP_END_NAMESPACE
# endif /* _STLP_IMPORT_VENDOR_CSTD */

#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:
