diff --git a/rpcs3/Emu/Cell/Modules/sys_libc_.cpp b/rpcs3/Emu/Cell/Modules/sys_libc_.cpp index 3ac6d0c5b9..b736208472 100644 --- a/rpcs3/Emu/Cell/Modules/sys_libc_.cpp +++ b/rpcs3/Emu/Cell/Modules/sys_libc_.cpp @@ -261,11 +261,18 @@ vm::ptr _sys_strcat(vm::ptr dst, vm::cptr src) } } -vm::cptr _sys_strchr(vm::cptr str, s32 ch) +vm::cptr _sys_strchr(vm::cptr str, char ch) { - sysPrxForUser.trace("_sys_strchr(str=%s, ch=0x%x)", str, ch); + sysPrxForUser.trace("_sys_strchr(str=%s, ch=%d)", str, ch); - return vm::cptr::make(vm::get_addr(strchr(str.get_ptr(), ch))); + for (u32 i = 0;; i++) + { + const char ch1 = str[i]; + if (ch1 == ch) + return str + i; + if (ch1 == '\0') + return vm::null; + } } vm::ptr _sys_strncat(vm::ptr dest, vm::cptr source, u32 len)