Skip to content

Proposal: expose the drive functions in the filepath package

This comes out of #1490 (closed), 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, which I will attach, 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.

Trac metadata
Trac field Value
Version 6.6.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component libraries/base
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system Unknown
Architecture Unknown
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information