diff --git a/ChangeLog b/ChangeLog index ea827b2472..37c7eeb114 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sun Jun 27 13:25:07 2010 Tanaka Akira + + * io.c (simple_sendfile): don't try to send data more than SSIZE_MAX + with single sendfile call.. + based on the patch by Eric Wong. [ruby-core:30908] + Sun Jun 27 10:41:38 2010 Nobuyoshi Nakada * lib/rubygems/require_paths_builder.rb (write_require_paths_file_if_needed): diff --git a/io.c b/io.c index 68f6a96522..48634d306b 100644 --- a/io.c +++ b/io.c @@ -8078,9 +8078,14 @@ nogvl_copy_stream_wait_write(struct copy_stream_struct *stp) #endif static ssize_t -simple_sendfile(int out_fd, int in_fd, off_t *offset, size_t count) +simple_sendfile(int out_fd, int in_fd, off_t *offset, off_t count) { - return sendfile(out_fd, in_fd, offset, count); +#if SIZEOF_OFF_T > SIZEOF_SIZE_T + /* we are limited by the 32-bit ssize_t return value on 32-bit */ + if (count > (off_t)SSIZE_MAX) + count = SSIZE_MAX; +#endif + return sendfile(out_fd, in_fd, offset, (size_t)count); } #endif