diff options
Diffstat (limited to 'ace/OS_NS_sys_uio.cpp')
-rw-r--r-- | ace/OS_NS_sys_uio.cpp | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/ace/OS_NS_sys_uio.cpp b/ace/OS_NS_sys_uio.cpp deleted file mode 100644 index 5936e84eaec..00000000000 --- a/ace/OS_NS_sys_uio.cpp +++ /dev/null @@ -1,127 +0,0 @@ -// -*- C++ -*- -// $Id$ - -#include "ace/OS_NS_sys_uio.h" - -ACE_RCSID(ace, OS_NS_sys_uio, "$Id$") - -#if !defined (ACE_HAS_INLINED_OSCALLS) -# include "ace/OS_NS_sys_uio.inl" -#endif /* ACE_HAS_INLINED_OS_CALLS */ - -#include "ace/OS_Memory.h" -#include "ace/OS_NS_string.h" -#include "ace/OS_NS_unistd.h" - -# if defined (ACE_LACKS_READV) - -// "Fake" readv for operating systems without it. Note that this is -// thread-safe. - -ssize_t -ACE_OS::readv_emulation (ACE_HANDLE handle, - ACE_READV_TYPE *iov, - int n) -{ - ACE_OS_TRACE ("ACE_OS::readv_emulation"); - - // In case there's a single element, skip the memcpy. - if (1 == n) - return ACE_OS::read (handle, iov[0].iov_base, iov[0].iov_len); - - ssize_t length = 0; - int i; - - for (i = 0; i < n; ++i) - if (ACE_static_cast (int, iov[i].iov_len) < 0) - return -1; - else - length += iov[i].iov_len; - - char *buf; -# if defined (ACE_HAS_ALLOCA) - buf = (char *) alloca (length); -# else - ACE_NEW_RETURN (buf, - char[length], - -1); -# endif /* !defined (ACE_HAS_ALLOCA) */ - - length = ACE_OS::read (handle, buf, length); - - if (length != -1) - { - char *ptr = buf; - ssize_t copyn = length; - - for (i = 0; - i < n && copyn > 0; - ++i) - { - ACE_OS::memcpy (iov[i].iov_base, ptr, - // iov_len is int on some platforms, size_t on others - copyn > (int) iov[i].iov_len - ? (size_t) iov[i].iov_len - : (size_t) copyn); - ptr += iov[i].iov_len; - copyn -= iov[i].iov_len; - } - } - -# if !defined (ACE_HAS_ALLOCA) - delete [] buf; -# endif /* !defined (ACE_HAS_ALLOCA) */ - return length; -} -# endif /* ACE_LACKS_READV */ - -# if defined (ACE_LACKS_WRITEV) - -// "Fake" writev for operating systems without it. Note that this is -// thread-safe. - -ssize_t -ACE_OS::writev_emulation (ACE_HANDLE handle, ACE_WRITEV_TYPE iov[], int n) -{ - ACE_OS_TRACE ("ACE_OS::writev_emulation"); - - // To avoid having to allocate a temporary buffer to which all of - // the data will be copied and then written, this implementation - // performs incremental writes. - - ssize_t bytes_sent = 0; - - for (int i = 0; i < n; ++i) - { - const ssize_t result = - ACE_OS::write (handle, iov[i].iov_base, iov[i].iov_len); - - if (result == -1) - { - // There is a subtle difference in behaviour depending on - // whether or not any data was sent. If no data was sent, - // then always return -1. Otherwise return bytes_sent. - // This gives the caller an opportunity to keep track of - // bytes that have already been sent. - if (bytes_sent > 0) - break; - else - return -1; - } - else - { - bytes_sent += result; - - // Do not continue on to the next loop iteration if the - // amount of data sent was less than the amount data given. - // This avoids a subtle problem where "holes" in the data - // stream would occur if partial sends of a given buffer in - // the iovec array occured. - if (ACE_static_cast (size_t, result) < iov[i].iov_len) - break; - } - } - - return bytes_sent; -} -# endif /* ACE_LACKS_WRITEV */ |