From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5787 invoked by alias); 14 Jan 2013 14:37:03 -0000 Received: (qmail 5695 invoked by uid 22791); 14 Jan 2013 14:37:02 -0000 X-SWARE-Spam-Status: No, hits=2.9 required=5.0 tests=AWL,BAYES_00,BOTNET,KHOP_DNSBL_BUMP,KHOP_THREADED,RCVD_IN_MSPIKE_BL,RCVD_IN_MSPIKE_L3 X-Spam-Check-By: sourceware.org Received: from milton.worldispnetwork.com (HELO milton.worldispnetwork.com) (67.217.57.10) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 14 Jan 2013 14:36:51 +0000 Received: (qmail 10676 invoked by uid 399); 14 Jan 2013 14:36:30 -0000 Received: from c122-106-16-37.rivrw1.nsw.optusnet.com.au (HELO ?10.0.2.15?) (career@shaddybaddah.name@122.106.16.37) by milton.worldispnetwork.com with ESMTPAM; 14 Jan 2013 14:36:30 -0000 Message-ID: <50F417F9.8040108@shaddybaddah.name> Date: Mon, 14 Jan 2013 14:37:00 -0000 From: Shaddy Baddah User-Agent: Mozilla/5.0 (X11; Linux i686; rv:10.0.5) Gecko/20120624 Icedove/10.0.5 MIME-Version: 1.0 To: cygwin@cygwin.com Subject: Re: stat() and tilde prefix (was bad bash tab completion) References: <5024B4D4.6080409@shaddybaddah.name> <50F395D5.4050201@shaddybaddah.name> <20130114061747.GB16739@ednor.casa.cgf.cx> <20130114100002.GA22039@calimero.vinschen.de> In-Reply-To: <20130114100002.GA22039@calimero.vinschen.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes 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/msg00180.txt.bz2 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. 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? -- Regards, Shaddy -- 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