This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Cygwin's writev() non-standard behavior


On Apr 23 16:06, qq qq wrote:
> writev() does not accept count 0 but it should
> 
> $ cat test.c
> #include <stdio.h>
> #include <errno.h>
> #include <stdlib.h>
> #include <string.h>
> #include <sys/uio.h>
> 
> int main()
> {
>  Âstruct iovec vec;
> 
>  Âmemset(&vec, 0, sizeof(vec));
>  Âif (writev(1, &vec, 0) < 0)
>  Â Âperror("writev");
>  Âreturn 0;
> }
> 
> Linux:
> $ gcc -Wall test.c
> $ ./a.out
> 
> Cygwin:
> $ gcc -Wall test.c
> $ ./a.exe
> writev: Invalid argument
> 
> This behavior is buggy per:
> 
>  Â Â Â EINVAL ... the vector count count is less than zero or greater than the permitted maximum ...

I applied a patch to CVS.  There's a central function (check_iovec)
checking the validity of the iovec input and this function returns
EINVAL if iovlen is <= 0, the total number of bytes otherwise.

However, check_iovec works fine with iovlen 0 and all the callers
(readv/writev/recvmsg/sendmsg) are handling a 0 return from this 
function, too, so a 0 return is nothing to worry about.

Please given the next snapshot from http://cygwin.com/snapshots/ a try.


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

Attachment: pgpq8Jpvcta7f.pgp
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]