[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