phobos
phobos copied to clipboard
"File does not exist" while the real error is "ENAMETOOLONG (File name too long)"
kdevel reported this on 2022-10-06T14:44:40Z
Transfered from https://issues.dlang.org/show_bug.cgi?id=23392
Description
```fdne-vs-fntl.d
module file_does_not_exist__vs__file_name_too_long;
import std.stdio;
import std.file;
version (Posix):
string make_long_filename ()
{
immutable char [256] longname = 'X'; // assuming NAME_MAX is 255
return (cast (string) longname).dup ();
}
void main ()
{
auto fsoname = make_long_filename ();
auto de = DirEntry (fsoname);
}
```
$ dmd -g fdne-vs-fntl.d
$ strace -festat,lstat ./fdne-vs-fntl
lstat("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 0x7fffffffd6d8) = -1 ENAMETOOLONG (File name too long)
std.file.FileException@std/file.d(3887): XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX: File does not exist
----------------
??:? ref @safe std.file.DirEntry std.file.DirEntry.__ctor(immutable(char)[]) [0x4b383d]
./fdne-vs-fntl.d:16 _Dmain [0x4b1130]
The lstat call is performed in existsImpl while DirEntry is constructed. Alas, errno is not checked.