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 |