38 lines
664 B
D
38 lines
664 B
D
immutable(T)[] assumeUnique(T)(ref T[] array) pure nothrow
|
|
{
|
|
auto result = cast(immutable(T)[]) array;
|
|
array = null;
|
|
return result;
|
|
}
|
|
|
|
pure nothrow
|
|
private string escapeShellArguments()
|
|
{
|
|
char[] buf;
|
|
|
|
@safe nothrow
|
|
char[] allocator(size_t size)
|
|
{
|
|
return buf = new char[size];
|
|
}
|
|
|
|
escapeShellArgument!allocator("foo");
|
|
return assumeUnique(buf);
|
|
}
|
|
|
|
@safe nothrow
|
|
auto escapeShellArgument(alias allocator)(in char[] arg)
|
|
{
|
|
auto buf = allocator(4);
|
|
buf[0] = 'f';
|
|
buf[1] = 'o';
|
|
buf[2] = 'o';
|
|
buf[3] = '\0';
|
|
}
|
|
|
|
void main()
|
|
{
|
|
string res = escapeShellArguments();
|
|
if (res != "foo\0") assert(0);
|
|
}
|