diff --git a/source/eventcore/driver.d b/source/eventcore/driver.d index 9a2d65f..99a38ef 100644 --- a/source/eventcore/driver.d +++ b/source/eventcore/driver.d @@ -119,7 +119,7 @@ interface EventDriverDNS { interface EventDriverFiles { @safe: /*@nogc:*/ nothrow: FileFD open(string path, FileOpenMode mode); - FileFD createTemp(); + FileFD adopt(int system_file_handle); void close(FileFD file); ulong getSize(FileFD file); diff --git a/source/eventcore/drivers/threadedfile.d b/source/eventcore/drivers/threadedfile.d index b0bf2bf..ab70e42 100644 --- a/source/eventcore/drivers/threadedfile.d +++ b/source/eventcore/drivers/threadedfile.d @@ -142,12 +142,17 @@ final class ThreadedFileEventDriver(Events : EventDriverEvents) : EventDriverFil } auto fd = () @trusted { return .open(path.toStringz(), flags, amode); } (); if (fd < 0) return FileFD.init; - return FileFD(fd); + return adopt(fd); } - final override FileFD createTemp() + final override FileFD adopt(int system_file_handle) { - assert(false, "TODO!"); + auto flags = () @trusted { return fcntl(system_file_handle, F_GETFD); } (); + if (flags == -1) return FileFD.invalid; + if (m_files[system_file_handle].refCount > 0) return FileFD.invalid; + m_files[system_file_handle] = FileInfo.init; + m_files[system_file_handle].refCount = 1; + return FileFD(system_file_handle); } void close(FileFD file)