std.path.getName(): Screwy by design?

Jonathan M Davis jmdavisProg at gmx.com
Tue Mar 1 01:16:36 PST 2011


On Tuesday 01 March 2011 00:58:04 Nick Sabalausky wrote:
> 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 agree. I would _think_ that it would return the file name minus the 
extension and that if there is no extension, then it would just return the file 
name.

> 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).


That's a bug IMHO. Presumably, the implementation didn't take the possibility of 
directory names with dots in them into account. Now, it _does_ follow what it 
says in the docs quite exactly, but that definitely seems off to me.
 
> 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.

I think that I agree with you on all counts. I can understand if the path stuff 
can't deal with / or \ in file names (that's probably not worth trying to get to 
work right), but it _should_ be able to handle directories with dots in them and 
files with no extension. Files without extension may be uncommon in Windows, but 
they're common enough on Linux.

- Jonathan M Davis


More information about the Digitalmars-d mailing list