From edeef019e8ad8b60f0547a854dc7763f98ff4c40 Mon Sep 17 00:00:00 2001 From: Richard Ipsum Date: Fri, 4 Oct 2019 23:28:48 +0100 Subject: simple: Add fdopen --- luxio/simple.lua | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/luxio/simple.lua b/luxio/simple.lua index 1f81d30..bb654e0 100644 --- a/luxio/simple.lua +++ b/luxio/simple.lua @@ -814,6 +814,23 @@ local function open(filename, flags, mode) return sio_wrap_mt(r, false, filename) end +--- Open a file from a file descriptor. +--- @tparam number fd file descriptor to open from +--- @treturn file|nil File handle, or nil if error +--- @treturn string|nil Error string if error +--- @treturn errno|nil Error number if error +--- @function fdopen +local function fdopen(fd) + -- Ensure the fd is valid before returning a file handle for it + local flags, errno = l_fcntl(fd, l.F_GETFL) + + if flags == -1 then + return err("fdopen", errno) + end + + return sio_wrap_mt(fd, false, nil) +end + local pipe_count = 0 --- Create an anonymous pipe. @@ -1461,6 +1478,7 @@ end return { open = open, + fdopen = fdopen, pipe = pipe, socketpair = socketpair, inet = inet, -- cgit v1.2.1