On 7/8/05, Glenn Linderman <[EMAIL PROTECTED]> wrote: > On approximately 7/8/2005 1:53 PM, came the following characters from > the keyboard of Michael G Schwern: > > > On Fri, Jul 08, 2005 at 03:50:49PM +0200, demerphq wrote: > > > >>Im not sure if this is useful, but many of the things that File::Spec > >>tries to do on win32 are actually supported directly by the Win32 API. > >>IMO at least some of File::Spec's behaviour could take advantage of > >>this API. > >> > >>Win32::GetFullPathName() is the one i have in mind when I say this. > >> > >>perl -e "use Win32; print Win32::GetFullPathName(qq[foo\\..\\bar]);" > >> > >>outputs "CWD\bar". > >> > >>So if you strip off the CWD from the result of > >>Win32::GetFullPathName() you get the OS'es solution of this problem, > >>which should bypass all of these issues. > > > > > > Does it? It still leaves us asking the question: can we assume foo\..\bar > > == > > bar on Windows? Just because a system call does it that way doesn't mean > > its right. > > In the presence of junction points, I think not. The system call would > have the opportunity to understand and check for the existance of > junction points, but whether it does or not, is anyone's guess, without > trying it.
Doesn't look like there is a problem with this. I guess ".." is resolved by the OS relative to ".", and not a hard link to a specific directory. (But that is pure speculation.) D:\dev\junct\foo>perl -MWin32 -e"print Win32::GetFullPathName('.');" D:\dev\junct\foo D:\dev\junct\foo>cd ..\..\test D:\dev\test>perl -MWin32 -e"print Win32::GetFullPathName('.');" D:\dev\test D:\dev\test>cd .. D:\dev>junction junct\foo Junction v1.03 - Win2K junction creator and reparse point viewer Copyright (C) 2000-2002 Mark Russinovich Systems Internals - http://www.sysinternals.com D:\dev\junct\foo: JUNCTION Substitute Name: d:\dev\test -- perl -Mre=debug -e "/just|another|perl|hacker/"