diff options
Diffstat (limited to 'ACE/ace/OS_NS_errno.h')
-rw-r--r-- | ACE/ace/OS_NS_errno.h | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/ACE/ace/OS_NS_errno.h b/ACE/ace/OS_NS_errno.h new file mode 100644 index 00000000000..740a176f706 --- /dev/null +++ b/ACE/ace/OS_NS_errno.h @@ -0,0 +1,100 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file OS_NS_errno.h + * + * $Id$ + * + * @author Douglas C. Schmidt <schmidt@cs.wustl.edu> + * @author Jesper S. M|ller<stophph@diku.dk> + * @author and a cast of thousands... + * + * Originally in OS.h. + */ +//============================================================================= + +#ifndef ACE_OS_NS_ERRNO_H +# define ACE_OS_NS_ERRNO_H + +# include /**/ "ace/pre.h" + +# include "ace/config-lite.h" + +# if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +# endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/os_include/os_errno.h" +#include "ace/ACE_export.h" + +#if defined (ACE_EXPORT_MACRO) +# undef ACE_EXPORT_MACRO +#endif +#define ACE_EXPORT_MACRO ACE_Export + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace ACE_OS { + + ACE_NAMESPACE_INLINE_FUNCTION + int last_error (void); + + ACE_NAMESPACE_INLINE_FUNCTION + void last_error (int); + + ACE_NAMESPACE_INLINE_FUNCTION + int set_errno_to_last_error (void); + + ACE_NAMESPACE_INLINE_FUNCTION + int set_errno_to_wsa_last_error (void); + +} /* namespace ACE_OS */ + +#if defined (ACE_HAS_WINCE_BROKEN_ERRNO) +/** + * @class ACE_CE_Errno + * + * Some versions of CE don't support <errno> and some versions' + * implementations are busted. So we implement our own. + * Our implementation takes up one Tls key, however, it does not + * allocate memory fromt the heap so there's no problem with cleanin + * up the errno when a thread exit. + */ +class ACE_Export ACE_CE_Errno +{ +public: + ACE_CE_Errno () {} + static void init (); + static void fini (); + static ACE_CE_Errno *instance (); + + operator int (void) const; + int operator= (int); + +private: + static ACE_CE_Errno *instance_; + static DWORD errno_key_; +}; + +# define errno (* (ACE_CE_Errno::instance ())) +#endif /* ACE_HAS_WINCE_BROKEN_ERRNO */ + +#if defined (ACE_HAS_WINCE_BROKEN_ERRNO) +# define ACE_ERRNO_TYPE ACE_CE_Errno +#else +# define ACE_ERRNO_TYPE int +#endif /* ACE_HAS_WINCE_BROKEN_ERRNO */ + +ACE_END_VERSIONED_NAMESPACE_DECL + +# if defined (ACE_HAS_INLINED_OSCALLS) +# if defined (ACE_INLINE) +# undef ACE_INLINE +# endif /* ACE_INLINE */ +# define ACE_INLINE inline +# include "ace/OS_NS_errno.inl" +# endif /* ACE_HAS_INLINED_OSCALLS */ + +# include /**/ "ace/post.h" +#endif /* ACE_OS_NS_ERRNO_H */ |