Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Date: Thu, 14 Jul 2005 19:32:30 -0400 From: Christopher Faylor To: cygwin AT cygwin DOT com Subject: Re: bug in freopen Message-ID: <20050714233230.GE26336@trixie.casa.cgf.cx> Reply-To: cygwin AT cygwin DOT com References: <071420052313 DOT 28844 DOT 42D6F19F0007DD6E000070AC22007340760A050E040D0C079D0A AT comcast DOT net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <071420052313.28844.42D6F19F0007DD6E000070AC22007340760A050E040D0C079D0A@comcast.net> User-Agent: Mutt/1.5.8i On Thu, Jul 14, 2005 at 11:13:35PM +0000, Eric Blake wrote: >POSIX requires that freopen(NULL, mode, f) reopen f in the new >mode, and allows implementations the option of not even closing >f in the first place. But in cygwin, it is failing with EFAULT, which is >not even one of the errors allowed by POSIX. > >http://www.opengroup.org/susv3xsh/freopen.html > >#include >#include >int main(void) >{ > FILE* f = freopen (NULL, "rb", stdin); /* Ensure that stdin is binary */ > printf ("file is %s, errno %d:%s\n", f ? "good" : "null", errno, > strerror(errno)); > return 0; >} > >CVS coreutils recently switched to this idiom, replacing its former >use of the nonstandard and setmode() with something >that is required by the standards. But until this bug is fixed, CVS >coreutils will not work with cygwin. The strace in cygwin shows >that newlib tried to perform open(NULL), which is the cause of >the EFAULT. Hmm. It should be pretty simple to just make this always fail with EBADF. That seems to be a valid thing to do as far as SUSv3 is concerned. I am curious, though, as to the rationale behind this change. I just tried this with -mno-cygwin and it dies with a ENOENT. So, they apparently removed windows-specific code and replaced it with code that doesn't work on windows... 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/