Brandon S. Allbery KF8NH wrote:
On Sep 19, 2009, at 07:45 , Duncan Coutts wrote:
On Thu, 2009-09-17 at 11:58 +0200, Marcus D. Gabriel wrote:
-- | 'reduceFilePath' returns a pathname that is reduced to canonical
-- form equivalent to that of ksh(1), that is, symbolic link names are
-- treated literally when finding the directory name. See @cd -L@ of
-- ksh(1). Specifically, extraneous separators @(\"/\")@, dot
-- @(\".\")@, and double-dot @(\"..\")@ directories are removed.
So it's like the existing System.Directory.canonicalizePath but it's
pure and it does not do anything with symlinks. On the other hand
because it's pure it can do something with non-local paths.
Is there anything POSIX-specific about this? I don't see it.
It's making assumptions about the safety of eliding "..". (What does
\\machine\share\..\ do?) On the other hand that's also unsafe on POSIX
in the presence of symlinks. In general I consider path cleanup not
involving validation against the filesystem to be risky.
I agree; this came up before during the design of System.FilePath, and
it's why the current library doesn't have a way to remove "..". The
docs should probably explain this point, because it's non-obvious that
you can't just "clean up" a path to remove the ".." and end up with
something that means the same thing.
Cheers,
Simon
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe