From 5fa1da783020e5b9c4f2f3ea2b00856a5aa606c4 Mon Sep 17 00:00:00 2001 From: DH Date: Tue, 31 Oct 2023 21:29:29 +0300 Subject: [PATCH] [orbis-kernel] implement sys_rdup --- orbis-kernel/src/sys/sys_sce.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/orbis-kernel/src/sys/sys_sce.cpp b/orbis-kernel/src/sys/sys_sce.cpp index 94c368ba5..102466d77 100644 --- a/orbis-kernel/src/sys/sys_sce.cpp +++ b/orbis-kernel/src/sys/sys_sce.cpp @@ -885,8 +885,23 @@ orbis::SysResult orbis::sys_randomized_path(Thread *thread /* TODO */) { std::printf("TODO: sys_randomized_path()\n"); return {}; } -orbis::SysResult orbis::sys_rdup(Thread *thread /* TODO */) { - return ErrorCode::NOSYS; +orbis::SysResult orbis::sys_rdup(Thread *thread, sint pid, sint fd) { + ORBIS_LOG_TODO(__FUNCTION__, pid, fd); + for (auto it = g_context.getProcessList(); it != nullptr; it = it->next) { + auto &p = it->object; + if (p.pid != pid) { + continue; + } + + auto file = p.fileDescriptors.get(fd); + if (file == nullptr) { + return ErrorCode::BADF; + } + + thread->retval[0] = thread->tproc->fileDescriptors.insert(std::move(file)); + return{}; + } + return ErrorCode::SRCH; } orbis::SysResult orbis::sys_dl_get_metadata(Thread *thread /* TODO */) { return ErrorCode::NOSYS;