From d3deab28aa7c933788dbd8f66ec3328d78956ed3 Mon Sep 17 00:00:00 2001 From: ParantezTech <12572227+par274@users.noreply.github.com> Date: Thu, 8 Oct 2026 23:44:39 +0300 Subject: [PATCH] [Kernel] Return POSIX results from _open and keep sceKernelOpen raw Co-authored-by: Sekai <140012992+SekaixX@users.noreply.github.com> --- src/SharpEmu.Libs/Kernel/KernelExports.cs | 2 +- src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/SharpEmu.Libs/Kernel/KernelExports.cs b/src/SharpEmu.Libs/Kernel/KernelExports.cs index e32c545..c1e3054 100644 --- a/src/SharpEmu.Libs/Kernel/KernelExports.cs +++ b/src/SharpEmu.Libs/Kernel/KernelExports.cs @@ -399,7 +399,7 @@ public static class KernelExports ExportName = "sceKernelOpen", Target = Generation.Gen4 | Generation.Gen5, LibraryName = "libKernel")] - public static int KernelOpen(CpuContext ctx) => KernelMemoryCompatExports.KernelOpenUnderscore(ctx); + public static int KernelOpen(CpuContext ctx) => KernelMemoryCompatExports.KernelOpenCore(ctx); [SysAbiExport( Nid = "mqQMh1zPPT8", diff --git a/src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs b/src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs index 1f9dee4..2ac75aa 100644 --- a/src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs +++ b/src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs @@ -1440,7 +1440,9 @@ public static partial class KernelMemoryCompatExports ExportName = "_open", Target = Generation.Gen4 | Generation.Gen5, LibraryName = "libKernel")] - public static int KernelOpenUnderscore(CpuContext ctx) + public static int KernelOpenUnderscore(CpuContext ctx) => PosixOpen(ctx); + + internal static int KernelOpenCore(CpuContext ctx) { var pathAddress = ctx[CpuRegister.Rdi]; var flags = unchecked((int)ctx[CpuRegister.Rsi]); @@ -1678,11 +1680,11 @@ public static partial class KernelMemoryCompatExports } // POSIX open(2): translates a failed raw open into -1/errno. On success - // KernelOpenUnderscore already writes the fd into RAX (the import bridge + // KernelOpenCore already writes the fd into RAX (the import bridge // prefers a written RAX over the return value), so returning 0 is correct. public static int PosixOpen(CpuContext ctx) { - var result = KernelOpenUnderscore(ctx); + var result = KernelOpenCore(ctx); return result == (int)OrbisGen2Result.ORBIS_GEN2_OK ? 0 : PosixFailure(ctx, result);