X-Recipient: archive-cygwin AT delorie DOT com X-Spam-Check-By: sourceware.org Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Subject: Re: bug with touch t/ Date: Fri, 7 Mar 2008 10:22:17 +0100 Message-ID: <8B3C53FEA05C744284526CAE5170F15904DD6124@de010369.de.ina.com> From: "Lemke, Michael SZ/HZA-ZIOM1" To: Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: 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 Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id m279N6Rj021021 On Thu, 6 Mar 2008 16:32:52 +0100, Corinna Vinschen wrote: > On Mar 6 16:27, Corinna Vinschen wrote: > > On Mar 6 14:56, Eric Blake wrote: > > > Corinna Vinschen cygwin.com> writes: > > > > > > > > > > > But the flags are not O_RDONLY|O_CREAT. They are O_WRONLY|O_CREAT. > > > > > > I still think Linux is wrong - t/ is not an existing directory, so you can't > > > claim that an attempt was made to open an existing directory with O_WRONLY. > > > But I guess it is a bit ambiguous, since if t/ did exist, then opening t/. > > > should indeed fail with EISDIR; at any rate, it is certainly more efficient to > > > blindly reject O_WRONLY due to the trailing slash without even checking for the > > > existence of t. > > > > In our case I added a special case to emit EISDIR, otherwise we would > > get ENOENT automatically (that's what STATUS_OBJECT_NAME_INVALID gets > > converted to). However, I'm somewhat puzzled that you used that bash > > example: > > > > $ : > t/ > > bash: t/: Is a directory. > > > > If what you said is right, and if I revert the change to fhandler.cc, > > we would get a ENOENT in that case, too. And given your arguments, > > that should be correct. > > > > Do you agree? > > I should add that I'm still rather leaning towards the Linux behaviour. > I tested this on Solaris 10, and it behaves again different. In both > examples open(2) returns with ENOTDIR. And for what it's worth, on AIX 5.3 they succeed: open("t/", O_WRONLY|O_CREAT|O_LARGEFILE) = 3 open("t/", O_RDONLY|O_CREAT|O_LARGEFILE) = 3 But: open("t/.", O_WRONLY|O_CREAT|O_LARGEFILE) Err#2 ENOENT open("t/.", O_RDONLY|O_CREAT|O_LARGEFILE) Err#2 ENOENT And so they do on Solaris 8: open64("t/", O_WRONLY|O_CREAT|O_LARGEFILE, 0666) = 3 open64("t/", O_RDONLY|O_CREAT|O_LARGEFILE, 0666) = 3 open64("t/.", O_WRONLY|O_CREAT|O_LARGEFILE, 0666) Err#2 ENOENT open64("t/.", O_RDONLY|O_CREAT|O_LARGEFILE, 0666) Err#2 ENOENT So it's the same on both OS and Linux is different. Michael -- 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/