getDirectory of FileSystem.d
kris
foo at bar.com
Wed Feb 14 11:55:00 PST 2007
Alberto wrote:
> I must get the current dir, and, I'm using getDirectory() from
> FileSystem.d to do that.
> A simple example:
>
> FilePath appDir = FileSystem.getDirectory;
>
> it works but there is a space at the end of path, so I have many errors
> when I try to join paths.
> Here's a log:
>
> giano.globals - appDir: 'C:\Documents and
> Settings\Admin\Desktop\projects\giano '
>
> I have tried to understand why by myself.
> This is a cut of getDirectory() from FileSystem:
>
> int length = GetCurrentDirectoryW (0, null);
> if (length) {
> char[MAX_PATH] tmp = void;
> auto dir = new wchar [length];
> GetCurrentDirectoryW (length, dir.ptr);
> return new FilePath (Utf.toUtf8 (dir, tmp));
> }
>
> in MSDN I read:
>
> Return Value
> If the function succeeds, the return value specifies the number of
> characters that are written to the buffer, not including the terminating
> null character.
> If the function fails, the return value is zero. To get extended error
> information, call GetLastError.
> If the buffer that is pointed to by lpBuffer is not large enough, the
> return value specifies the required size of the buffer, in characters,
> including the null-terminating character.
>
> null is passed as buffer to GetCurrentDirectoryW, so the return value
> should specifies the required size of the buffer including the
> null-terminating character, but D string doesn't have one.
> So, this line:
>
> auto dir = new wchar [length];
>
> should be fixed in:
>
> auto dir = new wchar [length-1];
>
> and the same for the ANSI version
> or I'm wrong?
>
>
That looks like a bug. Would you mind filing a bug-report over here,
please? http://www.dsource.org/projects/tango/newticket
More information about the Digitalmars-d-learn
mailing list