On Mon, Aug 18, 2008 at 01:55:20PM +0200, Christian Franke wrote: >During testing of my packages on 1.7, I got the following error message >from the grub-mkrescue script from package grub: > >$ cat boot.img /dev/zero | dd bs=1024 count=1440 > floppy.img >cat: write error: No space left on device > >But due to a hack in coreutils*/lib/full_write.c, the error message is >misleading. > > >The following test program demonstrates the root of the problem: > >===== testpipe.c ===== >#include <stdio.h> >#include <unistd.h> >#include <signal.h> >#include <errno.h> > >void sigpipe_handler() >{ > write(2, "[SIGPIPE!]", 10); >} > >int main() >{ > static char buf[1024*1024]; > signal(SIGPIPE, sigpipe_handler); > errno = 0; > int n = write(1, buf, sizeof(buf)); > fprintf(stderr, "write = %d, errno = %d\n", n, errno); > return 0; >} >====================== > > >Result on 1.5.25-15: > >$ ./testpipe | dd bs=1 count=1 >/dev/null 2>/dev/null >[SIGPIPE!]write = -1, errno = 32 > >Result on 1.7.0-28: > >$ ./testpipe | dd bs=1 count=1 >/dev/null 2>/dev/null >write = 0, errno = 32 > > >According to strace, errno=EPIPE is set in >fhandler_base::wait_overlapped() due to a failing GetOverlappedResult(). > >Missing raise(SIGPIPE) call in fhandler_base::write_overlapped() ?
Thanks for the test case. I'll look at this when I get back to a windows system. Right now my vmware workstation is broken and my vnc access to my windows system is down. Quite irritating. cgf -- 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/