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 "<string>", line 1, in<module> > >>>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