Fixes the following valgrind warning: ==29019== Syscall param writev(vector[...]) points to uninitialised byte(s) ==29019== at 0x584270B: writev (writev.c:51) ==29019== by 0x449BB2: uv__write (stream.c:733) ==29019== by 0x44AE91: uv_write2 (stream.c:1159) ==29019== by 0x44AF25: uv_write (stream.c:1180) ==29019== by 0x42CCAA: connect_cb (test-tcp-writealot.c:129) ==29019== by 0x44AC05: uv__stream_connect (stream.c:1097) ==29019== by 0x44AA25: uv__stream_io (stream.c:1050) ==29019== by 0x437430: uv__io_rw (core.c:539) ==29019== by 0x43C3D9: ev_invoke_pending (ev.c:2145) ==29019== by 0x436EC5: uv__poll (core.c:260) ==29019== by 0x436F0F: uv__run (core.c:269) ==29019== by 0x436F6E: uv_run (core.c:277) ==29019== Address 0x5f15040 is 0 bytes inside a block of size 94,371,840 alloc'd ==29019== at 0x4C2C5EF: malloc (vg_replace_malloc.c:270) ==29019== by 0x42CDED: run_test_tcp_writealot (test-tcp-writealot.c:148) ==29019== by 0x406551: run_test_part (runner.c:302) ==29019== by 0x405384: main (run-tests.c:57)
This commit fixes the following valgrind warning: ==26443== Conditional jump or move depends on uninitialised value(s) ==26443== at 0x44AAFF: uv__read (stream.c:872) ==26443== by 0x44ADD4: uv__stream_io (stream.c:1051) ==26443== by 0x4377B8: uv__io_rw (core.c:539) ==26443== by 0x43C761: ev_invoke_pending (ev.c:2145) ==26443== by 0x43724D: uv__poll (core.c:260) ==26443== by 0x437297: uv__run (core.c:269) ==26443== by 0x4372F6: uv_run (core.c:277) ==26443== by 0x42094B: run_test_pipe_ref4 (test-ref.c:334) ==26443== by 0x406551: run_test_part (runner.c:302) ==26443== by 0x405384: main (run-tests.c:57)
Some platforms don't support sendfile() (netbsd, openbsd), others don't support arbitrary file descriptors (freebsd, darwin) and yet others have quirks in their implementation (sunos). Work around the quirks. If all else fails, fall back to sendfile() emulation.