end
end
+--- Duplicate a file descriptor. See dup(2) for details.
+-- @param oldfd File descriptor to duplicate.
+-- @return New file descriptor or false on error.
+-- @return Error object on failure.
+function eio.dup(oldfd)
+ local rc, errstring
+
+ rc, errstring = leio.dup(oldfd)
+ if not rc then
+ return false,
+ err.new("duplicating file descriptor failed: %s", errstring)
+ end
+ return rc
+end
+
+
--- Duplicate a file descriptor. See dup(2) for details.
-- @param oldfd File descriptor to duplicate.
-- @param newfd Duplicated file descritor. If the file descriptor was open
return 1;
}
+static int
+eio_dup(lua_State *lua)
+{
+ int oldfd, rc;
+
+ oldfd = luaL_checkinteger(lua, 1);
+
+ rc = dup(oldfd);
+ if (rc < 0) {
+ lua_pushboolean(lua, 0);
+ lua_pushstring(lua, strerror(errno));
+ return 2;
+ }
+
+ lua_pushnumber(lua, rc);
+ return 1;
+}
+
static int
eio_dup2(lua_State *lua)
{
static luaL_Reg lib[] = {
{ "cloexec", eio_cloexec },
{ "close", eio_close },
+ { "dup", eio_dup },
{ "dup2", eio_dup2 },
{ "fclose", eio_fclose },
{ "fdopen", eio_fdopen },