On Tuesday, 5 April 2016 at 11:26:44 UTC, Thalamus wrote:
Thanks everyone! You've all been very helpful.

For anyone who has the same question and happens on this thread, I wanted to post what I finally came up with. I combined the information everyone in this thread gave me with what I saw in Phobos source for the to!string() implementation, closely following the latter. The important to!string() code is in the toImpl implementation in conv.d at line 880. The existing code uses strlen, but that's an ANSI function. Fortunately, D has wcslen available, too.

import core.stdc.stddef; // For wchar_t. This is defined differently for Windows vs POSIX.
import core.stdc.wchar_; // For wcslen.

wstring toWstring(wchar_t* value)
{
return value ? cast(wstring) value[0..wcslen(wstr)].dup : null;
}

The Phobos code notes that this operation is unsafe, because there's no guarantee the string is null-terminated as it should be. That's definitely true. The only outcome you can be really sure is accurate is an access violation. :)

thanks!
Thalamus

Reply via email to