@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.}
@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.
}