blob: 8cb8d6187d1889487288919677acfddea8351229 [file] [log] [blame] [edit]
@safe unittest
{
import std.internal.cstring;
version (Posix)
{
import core.stdc.stdlib : free;
import core.sys.posix.stdlib : setenv;
import std.exception : enforce;
void setEnvironment(scope const(char)[] name, scope const(char)[] value)
{ enforce(setenv(name.tempCString(), value.tempCString(), 1) != -1); }
}
version (Windows)
{
import core.sys.windows.winbase : SetEnvironmentVariableW;
import std.exception : enforce;
void setEnvironment(scope const(char)[] name, scope const(char)[] value)
{ enforce(SetEnvironmentVariableW(name.tempCStringW(), value.tempCStringW())); }
}
}
nothrow @nogc @system unittest
{
import std.internal.cstring;
import core.stdc.string;
string str = "abc";
// Intended usage
assert(strlen(str.tempCString()) == 3);
// Correct usage
auto tmp = str.tempCString();
assert(strlen(tmp) == 3); // or `tmp.ptr`, or `tmp.buffPtr`
// $(RED WARNING): $(RED Incorrect usage)
auto pInvalid1 = str.tempCString().ptr;
const char* pInvalid2 = str.tempCString();
// Both pointers refer to invalid memory here as
// returned values aren't assigned to a variable and
// both primary expressions are ended.
}