X-Recipient: archive-cygwin AT delorie DOT com 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 Message-ID: <50F417F9.8040108@shaddybaddah.name> Date: Tue, 15 Jan 2013 01:36:41 +1100 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 AT cygwin DOT com Subject: Re: stat() and tilde prefix (was bad bash tab completion) References: <5024B4D4 DOT 6080409 AT shaddybaddah DOT name> <50F395D5 DOT 4050201 AT shaddybaddah DOT name> <20130114061747 DOT GB16739 AT ednor DOT casa DOT cgf DOT cx> <20130114100002 DOT GA22039 AT calimero DOT vinschen DOT 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 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 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