Proposal: expose the drive functions in the filepath package

Ian Lynagh igloo at earth.li
Sat Jul 14 08:39:33 EDT 2007


Hi all,

This is proposal 1535: http://hackage.haskell.org/trac/ghc/ticket/1535

This comes out of
    http://hackage.haskell.org/trac/ghc/ticket/1490
where, in createDirectoryIfMissing, we use stat to determine if a
directory exists.

(I don't think catching an exception is a possibility in this case, as
mkdir returns EEXIST if "pathname already exists (not necessarily as a
directory)", so we can't distinguish between the directory already
existing and a file existing with the name that we want. Short of doing
something ugly like trying to make (path ++ "/.") and seeing if we get
ENOTDIR, anyway).

The problem is that mingw's stat succeeds for C:\ and C:\foo but fails
for C: and C:\foo\. The current code strips a trailing \ before calling
stat, and thus fails if asked to create C:\ (which we always do if "make
parents" is true, and of course this path could be given explicitly by a
user).

What we want is something like

    if isDrive x
    then addTrailingPathSeparator x
    else dropTrailingPathSeparator x

except filepath currently doesn't export isDrive, for reasons I'm not
entirely clear on.

Thus I propose exposing the *Drive functions from the filepath package.
The patch, attached to the bug, is rather trivial as the code is already
written, tested etc, just not exposed.

Let's try until 21 July for a discussion period.

Please try to accompany any objections with a (clean) alternative
solution to the original problem.


Thanks
Ian



More information about the Libraries mailing list