std.path.getName(): Screwy by design?
Nick Sabalausky
a at a.a
Tue Mar 1 00:58:04 PST 2011
According to the docs, std.path.getName() "Returns the extensionless version
of a filename or path."
But the doc also says that if the filename doesn't have a dot, then it
returns null (and I've verified that on DMD 2.050). Isn't that a bit
ridiculous? Shouldn't it still return the extensionless version even if it
doesn't have an extension? Ie, return the original string.
I would expect all of the following to pass, but currently (by design) only
the first two pass:
assert(getName(r"file.ext") == r"file");
assert(getName(r"/path/file.ext") == r"/path/file");
assert(getName(r"file") == r"file");
assert(getName(r"/path/file") == r"/path/file");
The current behavior seems useless.
Additionally, this also seems screwy:
// Currently passes:
assert(getName(r"/pa.th/file") == r"/pa");
WTF? The docs seem to suggest that's by design, but I can't imagine why.
Even on Windows it's not as if filenames can contain forward slashes (and
except for the command-line, accessing paths with forward-slash separators
works fine on Windows).
Fortunately, the docs do seem to be wrong about this:
version(Windows)
getName(r"d:\path.two\bar") => null
That currently returns r"d:\path.two\bar" as I would expect.
If those in charge agree with me on all of the this, I'd be glad to go
through std.path, fix all of that, check for any other issues and submit a
modified std.path with updated examples and unittests for approval.
More information about the Digitalmars-d
mailing list