xread/xwrite: clip MAX_IO_SIZE to SSIZE_MAX
commita983e6ac58094a3b2466ad3be13049ce213f9fc3
authorJunio C Hamano <gitster@pobox.com>
Wed, 11 Feb 2015 21:13:10 +0000 (11 13:13 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 12 Feb 2015 19:01:11 +0000 (12 11:01 -0800)
tree4b63b2088ba8dfacdda37abea41621e26bdf3c37
parent0b6806b9e45c659d25b87fb5713c920a3081eac8
xread/xwrite: clip MAX_IO_SIZE to SSIZE_MAX

Since 0b6806b9 (xread, xwrite: limit size of IO to 8MB, 2013-08-20),
we chomp our calls to read(2) and write(2) into chunks of
MAX_IO_SIZE bytes (8 MiB), because a large IO results in a bad
latency when the program needs to be killed.  This also brought our
IO below SSIZE_MAX, which is a limit POSIX allows read(2) and
write(2) to fail when the IO size exceeds it, for OS X, where a
problem was originally reported.

However, there are other systems that define SSIZE_MAX smaller than
our default, and feeding 8 MiB to underlying read(2)/write(2) would
fail.  Make sure we clip our calls to the lower limit as well.

Reported-by: Joachim Schmitz <jojo@schmitz-digital.de>
Helped-by: Torsten Bögershausen <tboegi@web.de>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
wrapper.c