diff --git a/rpcs3/Emu/Cell/Modules/sys_libc_.cpp b/rpcs3/Emu/Cell/Modules/sys_libc_.cpp index b736208472..3890373c44 100644 --- a/rpcs3/Emu/Cell/Modules/sys_libc_.cpp +++ b/rpcs3/Emu/Cell/Modules/sys_libc_.cpp @@ -328,11 +328,22 @@ s32 _sys_strncasecmp(vm::cptr str1, vm::cptr str2, u32 n) return 0; } -vm::ptr _sys_strrchr(vm::cptr str, s32 character) +vm::cptr _sys_strrchr(vm::cptr str, char ch) { - sysPrxForUser.trace("_sys_strrchr(str=%s, character=%c)", str, (char)character); + sysPrxForUser.trace("_sys_strrchr(str=%s, ch=%d)", str, ch); - return vm::ptr::make(vm::get_addr(strrchr(str.get_ptr(), character))); + vm::cptr res = vm::null; + + for (u32 i = 0;; i++) + { + const char ch1 = str[i]; + if (ch1 == ch) + res = str + i; + if (ch1 == '\0') + break; + } + + return res; } u32 _sys_malloc(u32 size)