From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22793 invoked by alias); 14 Jan 2013 16:13:46 -0000 Received: (qmail 21788 invoked by uid 22791); 14 Jan 2013 16:13:20 -0000 X-Spam-Check-By: sourceware.org Received: from aquarius.hirmke.de (HELO calimero.vinschen.de) (217.91.18.234) by sourceware.org (qpsmtpd/0.83/v0.83-20-g38e4449) with ESMTP; Mon, 14 Jan 2013 16:13:10 +0000 Received: by calimero.vinschen.de (Postfix, from userid 500) id BCCD95205E5; Mon, 14 Jan 2013 17:13:07 +0100 (CET) Date: Mon, 14 Jan 2013 16:13:00 -0000 From: Corinna Vinschen To: cygwin@cygwin.com Subject: Re: stat() and tilde prefix (was bad bash tab completion) Message-ID: <20130114161307.GB8617@calimero.vinschen.de> Reply-To: cygwin@cygwin.com Mail-Followup-To: cygwin@cygwin.com References: <5024B4D4.6080409@shaddybaddah.name> <50F395D5.4050201@shaddybaddah.name> <20130114061747.GB16739@ednor.casa.cgf.cx> <20130114100002.GA22039@calimero.vinschen.de> <50F417F9.8040108@shaddybaddah.name> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <50F417F9.8040108@shaddybaddah.name> User-Agent: Mutt/1.5.21 (2010-09-15) Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Mail-Followup-To: cygwin@cygwin.com X-SW-Source: 2013-01/txt/msg00186.txt.bz2 On Jan 15 01:36, Shaddy Baddah wrote: > Hi, > > On 14/01/13 21:00, Corinna Vinschen wrote: > >On Jan 14 01:17, Christopher Faylor wrote: > >>On Mon, Jan 14, 2013 at 04:21:25PM +1100, Shaddy Baddah wrote: > >>>In investigating this, I believe the issue I am having is due to how > >>>stat() handles tilde prefixed paths. On linux we see: > >>> > >>>linux$ $ python -c 'import os; print os.stat("~/..")' > >>>Traceback (most recent call last): > >>> File "", line 1, in > >>>OSError: [Errno 2] No such file or directory: '~/..' > >>> > >>>and on cygwin we see: > >>> > >>>cygwin$ python -c 'import os; print os.stat("~/..")' > >>>posix.stat_result(st_mode=16832, st_ino=562949953496729L, > >>>st_dev=4174909669L, st_nlink=1, st_uid=42037, st_gid=10513, st_size=0L, > >>>st_atime=1357616166, st_mtime=1357616166, st_ctime=1357616166) > >> > >>It is a bug. It's not just "~". Any nonexistent directory will > >>work, like "foo/..". > > > >And it's a bug which isn't easily fixed. Since about the dawn of time, > >Cygwin's core path handling evaluates the path in a non-POSIX manner, > >mainly for performance reasons. > > Thank you both for your explanations. If my understanding is correct, > stat() will be returning for the current working directory. In the above case, yes. > It seems to me then that a patch to bash may be in order? I can see how > the bash check is the right thing to do. It doesn't want the special > tilde expansion to mask and disallow referencing of real tilde prefixed > paths. So the stat() check is the quick win to determine that. > > From what I make of it, there needs to be a patch that, although can > work generically, adds checks only required for Cygwin. And therefore > is specific to the Cygwin package. > > The check would be an extension of the file_exists() function, perhaps > called tilde_file_exists(), which determines if the tilde prefix forms > a directory component of the path (strchr('/')?). If it does not, the > file_exists() check is sufficient. If it does, then the check of if > that directory exists is logically and'ed to the result of > file_exists(). > > Does that sound about right? A check like this might be a good idea. Ultimately I would be glad to be able to come up with more correct code in Cygwin while not getting slower, of course. But that's wishful thinking for now. Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple