Implement createTempFile on Posix.

This commit is contained in:
Sönke Ludwig 2016-12-10 16:01:40 +01:00
parent 09d9ea47bf
commit a7bfbc1c45

View file

@ -157,8 +157,8 @@ FileStream createTempFile(string suffix = null)
assert(suffix.length <= int.max); assert(suffix.length <= int.max);
auto fd = () @trusted { return mkstemps(templ.ptr, cast(int)suffix.length); } (); auto fd = () @trusted { return mkstemps(templ.ptr, cast(int)suffix.length); } ();
enforce(fd >= 0, "Failed to create temporary file."); enforce(fd >= 0, "Failed to create temporary file.");
assert(false); auto efd = eventDriver.files.adopt(fd);
//return eventDriver.adoptFile(fd, Path(templ[0 .. $-1].idup), FileMode.createTrunc); return FileStream(efd, Path(templ[0 .. $-1].idup), FileMode.createTrunc);
} }
} }
@ -471,9 +471,15 @@ logDebug("Written %s", res[2]);
enforce(res[1] == IOStatus.ok, "Failed to read data from disk."); enforce(res[1] == IOStatus.ok, "Failed to read data from disk.");
} }
void write(InputStream)(InputStream stream, ulong nbytes = 0) void write(in char[] bytes)
{ {
writeDefault(stream, nbytes); write(cast(const(ubyte)[])bytes);
}
void write(InputStream)(InputStream stream, ulong nbytes = 0)
if (isInputStream!InputStream)
{
writeDefault(this, stream, nbytes);
} }
void flush() void flush()
@ -491,11 +497,14 @@ mixin validateRandomAccessStream!FileStream;
private void writeDefault(OutputStream, InputStream)(ref OutputStream dst, InputStream stream, ulong nbytes = 0) private void writeDefault(OutputStream, InputStream)(ref OutputStream dst, InputStream stream, ulong nbytes = 0)
if (isOutputStream!OutputStream && isInputStream!InputStream)
{ {
assert(false); import vibe.internal.allocator : theAllocator, make, dispose;
/* import std.algorithm.comparison : min;
static struct Buffer { ubyte[64*1024] bytes = void; } static struct Buffer { ubyte[64*1024] bytes = void; }
auto bufferobj = FreeListRef!(Buffer, false)(); auto bufferobj = () @trusted { return theAllocator.make!Buffer(); } ();
scope (exit) () @trusted { theAllocator.dispose(bufferobj); } ();
auto buffer = bufferobj.bytes[]; auto buffer = bufferobj.bytes[];
//logTrace("default write %d bytes, empty=%s", nbytes, stream.empty); //logTrace("default write %d bytes, empty=%s", nbytes, stream.empty);
@ -516,7 +525,6 @@ private void writeDefault(OutputStream, InputStream)(ref OutputStream dst, Input
nbytes -= chunk; nbytes -= chunk;
} }
} }
*/
} }