OS_NS_errno.inl

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // $Id: OS_NS_errno.inl 80826 2008-03-04 14:51:23Z wotte $
00004 
00005 #include "ace/config-all.h"    /* Need ACE_TRACE */
00006 
00007 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00008 
00009 ACE_INLINE int
00010 ACE_OS::last_error (void)
00011 {
00012   // ACE_OS_TRACE ("ACE_OS::last_error");
00013 
00014 #if defined (ACE_WIN32)
00015   // ACE_OS::last_error() prefers errnor since started out as a way to
00016   // avoid directly accessing errno in ACE code - particularly the ACE
00017   // C++ socket wrapper facades.  On Windows, some things that would
00018   // use errno on UNIX require ::GetLastError(), so this method tries
00019   // to shield the rest of ACE from having to know about this.
00020   int lerror = ::GetLastError ();
00021   int lerrno = errno;
00022   return lerrno == 0 ? lerror : lerrno;
00023 #else
00024   return errno;
00025 #endif /* ACE_WIN32 */
00026 }
00027 
00028 ACE_INLINE void
00029 ACE_OS::last_error (int error)
00030 {
00031   ACE_OS_TRACE ("ACE_OS::last_error");
00032 #if defined (ACE_WIN32)
00033   ::SetLastError (error);
00034 #endif /* ACE_WIN32 */
00035   errno = error;
00036 }
00037 
00038 ACE_INLINE int
00039 ACE_OS::set_errno_to_last_error (void)
00040 {
00041 # if defined (ACE_WIN32)
00042   return errno = ::GetLastError ();
00043 #else
00044   return errno;
00045 # endif /* defined(ACE_WIN32) */
00046 }
00047 
00048 ACE_INLINE int
00049 ACE_OS::set_errno_to_wsa_last_error (void)
00050 {
00051 # if defined (ACE_WIN32)
00052   return errno = ::WSAGetLastError ();
00053 #else
00054   return errno;
00055 # endif /* defined(ACE_WIN32) */
00056 }
00057 
00058 #if defined (ACE_HAS_WINCE_BROKEN_ERRNO)
00059 
00060 ACE_INLINE ACE_CE_Errno *
00061 ACE_CE_Errno::instance ()
00062 {
00063   // This should be inlined.
00064   return ACE_CE_Errno::instance_;
00065 }
00066 
00067 ACE_INLINE
00068 ACE_CE_Errno::operator int (void) const
00069 {
00070   return (int) TlsGetValue (ACE_CE_Errno::errno_key_);
00071 }
00072 
00073 ACE_INLINE int
00074 ACE_CE_Errno::operator= (int x)
00075 {
00076   // error checking?
00077   TlsSetValue (ACE_CE_Errno::errno_key_, (void *) x);
00078   return x;
00079 }
00080 
00081 #endif /* ACE_HAS_WINCE_BROKEN_ERRNO */
00082 
00083 ACE_END_VERSIONED_NAMESPACE_DECL

Generated on Tue Feb 2 17:18:41 2010 for ACE by  doxygen 1.4.7