From 044c86dc3fea3671dca41c66f24fe4c7a1d83bbb Mon Sep 17 00:00:00 2001 From: DH Date: Sat, 11 Nov 2023 22:25:31 +0300 Subject: [PATCH] [orbis-kenel] implement sys_access fix shm_unlink --- orbis-kernel/src/sys/sys_resource.cpp | 58 ++++++++++++++++++++++++++- orbis-kernel/src/sys/sys_vfs.cpp | 5 +++ rpcsx-os/ops.cpp | 2 +- 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/orbis-kernel/src/sys/sys_resource.cpp b/orbis-kernel/src/sys/sys_resource.cpp index d8942bccc..52725f402 100644 --- a/orbis-kernel/src/sys/sys_resource.cpp +++ b/orbis-kernel/src/sys/sys_resource.cpp @@ -1,5 +1,13 @@ #include "sys/sysproto.hpp" +namespace orbis { +struct rlimit { + int64_t softLimit; + int64_t hardLimit; +}; +} // namespace orbis + + orbis::SysResult orbis::sys_getpriority(Thread *thread, sint which, sint who) { return ErrorCode::NOSYS; } @@ -23,7 +31,55 @@ orbis::SysResult orbis::sys_setrlimit(Thread *thread, uint which, } orbis::SysResult orbis::sys_getrlimit(Thread *thread, uint which, ptr rlp) { - return ErrorCode::NOSYS; + switch (which) { + case 0: { // cpu + break; + } + case 1: { // fsize + break; + } + case 2: { // data + break; + } + case 3: { // stack + break; + } + case 4: { // core + break; + } + case 5: { // rss + break; + } + case 6: { // memlock + break; + } + case 7: { // nproc + break; + } + case 8: { // nofile + break; + } + case 9: { // sbsize + break; + } + case 10: { // vmem + break; + } + case 11: { // npts + break; + } + case 12: { // swap + break; + } + + default: + return ErrorCode::INVAL; + } + + rlp->softLimit = 4096; + rlp->hardLimit = 4096; + + return {}; } orbis::SysResult orbis::sys_getrusage(Thread *thread, sint who, ptr rusage) { diff --git a/orbis-kernel/src/sys/sys_vfs.cpp b/orbis-kernel/src/sys/sys_vfs.cpp index 6ee14511e..51dadcb63 100644 --- a/orbis-kernel/src/sys/sys_vfs.cpp +++ b/orbis-kernel/src/sys/sys_vfs.cpp @@ -146,6 +146,11 @@ orbis::SysResult orbis::sys_freebsd6_lseek(Thread *thread, sint fd, sint, return sys_lseek(thread, fd, offset, whence); } orbis::SysResult orbis::sys_access(Thread *thread, ptr path, sint flags) { + if (auto open = thread->tproc->ops->open) { + Ref file; + return open(thread, path, flags, 0, &file); + } + return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_faccessat(Thread *thread, sint fd, ptr path, diff --git a/rpcsx-os/ops.cpp b/rpcsx-os/ops.cpp index 2f536defd..1abdb02ba 100644 --- a/rpcsx-os/ops.cpp +++ b/rpcsx-os/ops.cpp @@ -358,7 +358,7 @@ orbis::SysResult socket(orbis::Thread *thread, orbis::ptr name, orbis::SysResult shm_unlink(orbis::Thread *thread, const char *path) { auto dev = static_cast(orbis::g_context.shmDevice.get()); - return dev->unlink(getAbsolutePath(path, thread).c_str(), false, thread); + return dev->unlink(path, false, thread); } orbis::SysResult dynlib_get_obj_member(orbis::Thread *thread,