Bug 6814 – Calling std.file.readLink causes code to not compile.
Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2011-10-15T16:57:00Z
Last change time
2012-01-07T23:35:56Z
Assigned to
nobody
Creator
opantm+spam
Comments
Comment #0 by opantm+spam — 2011-10-15T16:57:39Z
The function std.file.readLink attempts to convert a char[2048] to a char* implicitly, causing any code calling it to result in a compiler error.
Test Case:
import std.stdio;
import std.file;
void main() {
string Path = readLink("/proc/self/exe");
writefln(Path);
}
Output:
/usr/include/d/dmd/phobos/std/file.d(1834): Error: function core.sys.posix.unistd.readlink (in const(char*), char*, ulong) is not callable using argument types (const(char*),char[2048LU],ulong)
/usr/include/d/dmd/phobos/std/file.d(1835): Error: cannot implicitly convert expression (buffer) of type char[2048LU] to char*
Fix:
Just add a .ptr when calling the core.sys version.
As an unrelated issue, readLink will also truncate without warning if the path resolves to more than 2047 characters, but I'm not sure if that's worth opening a separate bug report for.
Comment #1 by issues.dlang — 2011-10-15T17:48:09Z
This is very bizarre, because the unit tests compile and run just fine for readLink. But your example does indeed fail to compile.