mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
Some missing from merge.
Signed-off-by: Salja <salja2012@hotmail.de>
This commit is contained in:
parent
ec939a5bce
commit
f4be15a7af
1895 changed files with 160408 additions and 53601 deletions
|
|
@ -1,27 +1,25 @@
|
|||
// $Id: OS_NS_sys_sendfile.cpp 84216 2009-01-22 18:34:40Z johnnyw $
|
||||
|
||||
#include "ace/OS_NS_sys_sendfile.h"
|
||||
#include "ace/OS_NS_sys_mman.h"
|
||||
|
||||
#if defined (ACE_WIN32) || defined (HPUX)
|
||||
# include "ace/OS_NS_sys_socket.h"
|
||||
#else
|
||||
# include "ace/OS_NS_unistd.h"
|
||||
#endif /* ACE_WIN32 || HPUX */
|
||||
|
||||
#include "ace/OS_NS_unistd.h"
|
||||
|
||||
#ifndef ACE_HAS_INLINED_OSCALLS
|
||||
# include "ace/OS_NS_sys_sendfile.inl"
|
||||
#endif /* ACE_HAS_INLINED_OSCALLS */
|
||||
|
||||
#include "ace/Malloc_Base.h"
|
||||
#include "ace/OS_Memory.h"
|
||||
#include "ace/os_include/os_errno.h"
|
||||
|
||||
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
|
||||
|
||||
#if defined ACE_HAS_SENDFILE && ACE_HAS_SENDFILE == 0
|
||||
ssize_t
|
||||
ACE_OS::sendfile_emulation (ACE_HANDLE out_fd,
|
||||
ACE_HANDLE in_fd,
|
||||
off_t *offset,
|
||||
off_t * offset,
|
||||
size_t count)
|
||||
{
|
||||
// @@ Is it possible to inline a call to ::TransmitFile() on
|
||||
|
|
@ -30,24 +28,10 @@ ACE_OS::sendfile_emulation (ACE_HANDLE out_fd,
|
|||
// @@ We may want set up a signal lease (or oplock) if supported by
|
||||
// the platform so that we don't get a bus error if the mmap()ed
|
||||
// file is truncated.
|
||||
void *buf = ACE_OS::mmap (0, count, PROT_READ, MAP_SHARED, in_fd, *offset);
|
||||
const bool use_read = buf == MAP_FAILED && errno == ENODEV;
|
||||
ACE_OFF_T prev_pos;
|
||||
void * const buf =
|
||||
ACE_OS::mmap (0, count, PROT_READ, MAP_SHARED, in_fd, *offset);
|
||||
|
||||
if (use_read)
|
||||
{
|
||||
# ifdef ACE_HAS_ALLOC_HOOKS
|
||||
ACE_ALLOCATOR_RETURN (buf,
|
||||
ACE_Allocator::instance ()->malloc (count), -1);
|
||||
# else
|
||||
ACE_NEW_RETURN (buf, char[count], -1);
|
||||
# endif
|
||||
prev_pos = ACE_OS::lseek (in_fd, 0, SEEK_CUR);
|
||||
if (ACE_OS::lseek (in_fd, *offset, SEEK_SET) == -1
|
||||
|| ACE_OS::read (in_fd, buf, count) == -1)
|
||||
return -1;
|
||||
}
|
||||
else if (buf == MAP_FAILED)
|
||||
if (buf == MAP_FAILED)
|
||||
return -1;
|
||||
|
||||
#if defined (ACE_WIN32) || defined (HPUX)
|
||||
|
|
@ -57,17 +41,7 @@ ACE_OS::sendfile_emulation (ACE_HANDLE out_fd,
|
|||
ssize_t const r = ACE_OS::write (out_fd, buf, count);
|
||||
#endif /* ACE_WIN32 */
|
||||
|
||||
if (use_read)
|
||||
{
|
||||
ACE_OS::lseek (in_fd, prev_pos, SEEK_SET);
|
||||
# ifdef ACE_HAS_ALLOC_HOOKS
|
||||
ACE_Allocator::instance ()->free (buf);
|
||||
# else
|
||||
delete[] static_cast<char *> (buf);
|
||||
# endif
|
||||
}
|
||||
else
|
||||
(void) ACE_OS::munmap (buf, count);
|
||||
(void) ACE_OS::munmap (buf, count);
|
||||
|
||||
if (r > 0)
|
||||
*offset += static_cast<off_t> (r);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue