From 7e9031439c876102af6f4a53d7061d55944ae2ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Sat, 10 Dec 2016 15:59:03 +0100 Subject: [PATCH] Remove EventDriverFiles.createTemp() and add adopt() instead. The rationale is to keep the event loop abstraction at a minimal size. createTemp(), to be generally useful, would also require a getFilename(fd) method and possibly more. adopt() on the other hand is frequently useful for wrapping other libraries. --- source/eventcore/driver.d | 2 +- source/eventcore/drivers/threadedfile.d | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) 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)