[Haskell-cafe] Re: Suggested additions to
System.FilePath.Posix/Windows
Simon Marlow
marlowsd at gmail.com
Sat Sep 19 16:08:29 EDT 2009
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
More information about the Haskell-Cafe
mailing list