Hello! Sorry for delayed replies, at home i'm not subscribed to Cygwin ML, and 
in Russia we had a holiday yesterday.

> Thanks for the patch.  The idea sounds good, and I think it's the right
> thing to do *not* to add this to normalize_win32_path, because the ..
> semantics on WINdows are so that a .. is allowed even if the parent
> doesn't exist.

 Yes, i agree. After all, POSIX rules apply to POSIX paths. And having Win32 
paths in POSIX environment is kind of supernatural. :)

> I didn't test your patch so far, but I'm a bit puzzled about your
> performance claim: ~0.2 secs compared to what?  What's your test case?

 I don't remember exactly, but i've done something like 'time ls -l ../bin' 
after cd'ing to /usr/src.

> I mean, this tiny code snippet can't take 0.2 secs per single call,

 Yes, but:
 1. From strace it seems that 'ls -l' fstat()s every file with file name 
appended to the given path. And each file gets '..' in its path.
 2. Path conversion implies reading mount tables, symlinks, etc. I tried to 
imagine how this could be optimized, but found no simple solution. Because in 
general case this should also work for things like 
'/mnt/drive1/../symlink2/../drive3', across all mounts and symlinks. So, this 
solution is kind of balance between performance and simplicity.

 Actually, this even can be optimized by implementing a part-by-part path 
conversion, for example (imagine we get /usr/src/../bin as argument):
 1. Start conversion until we meet '..'. Remember this place.
 2. Convert '/usr/src' to Windows format, get 'C:\cygwin64\usr\src'.
 3. Check for existence.
 4. Step one component back in Win32 path, get 'C:\cygwin64\usr'.
 5. Proceed with conversion from the point remembered in (1), the part of path 
is already converted and checked, we don't need to re-convert it.
 But this approach would really require total overhaul of all the path handling 
which is difficult.

Kind regards,
Pavel Fedin
Expert Engineer
Samsung Electronics Research center Russia



--
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

Reply via email to