Hi list. I've encountered a problem with the readv system call under Cygwin of the form
int readv(int fd, const struct iovec *vector, int count); It appears that readv is reading past the end of the file described by fd and instead reading until each buffer in the iovec is filled. This is not limited to disk files, as I originally came across this problem when reading from a pty's file descriptor. The attached program and input file demonstrate the error. Please note, in the example I opened the file with the command test_fd = open("testfile.foo",O_RDWR); however, the same behavior is observed opening the file as test_fd = open("testfile.foo",O_RDWR | O_TEXT); or test_fd = open("testfile.foo",O_RDWR | O_BINARY); The output I got from running this program is as follows: $ ./readv_test Total Bytes: 25 Vectors: 12345 *789012345 ♠o☺a ► You should notice that although there are only 16 bytes in the file, readv returns the summed length of the two buffers in the iovec, 25. In the test case I pad the buffers with 'X's, so it is clear that readv is copying data into them from somewhere. More confusing still, replacing the readv call with bytes_read = read(test_fd, arr1, 20); works flawlessly. It appears to me that in fhandler.cc, readv simply calls read. I will admit that my understanding of how these c++ libraries are called from a c program is limited. I've included output from cygcheck -s, though I just updated my installation with setup a minute ago. Thanks! Matt Hirsch P.S. The only real discussion I found in the mailing lists related to the readv call was with regard to a patch submitted by Conrad Scott. The current code seems to differ in some details to Conrad's patch. Has this been updated more recently than that? Granted, I'm not subscribed to the developer's mailing list... ;) I haven't tried this with any old versions of Cygwin.
readv_test.c
Description: Binary data
testfile.foo
Description: Binary data
cygcheck
Description: Binary data
-- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/