diff --git a/rpcs3/Emu/Cell/Modules/sys_libc_.cpp b/rpcs3/Emu/Cell/Modules/sys_libc_.cpp index 3e13cc641c..0e1afb79b1 100644 --- a/rpcs3/Emu/Cell/Modules/sys_libc_.cpp +++ b/rpcs3/Emu/Cell/Modules/sys_libc_.cpp @@ -241,13 +241,24 @@ s32 _sys_strncmp(vm::cptr str1, vm::cptr str2, u32 max) return 0; } -vm::ptr _sys_strcat(vm::ptr dest, vm::cptr source) +vm::ptr _sys_strcat(vm::ptr dst, vm::cptr src) { - sysPrxForUser.trace("_sys_strcat(dest=*0x%x, source=%s)", dest, source); + sysPrxForUser.trace("_sys_strcat(dst=*0x%x %s, src=%s)", dst, dst, src); - verify(HERE), std::strcat(dest.get_ptr(), source.get_ptr()) == dest.get_ptr(); + auto str = dst; - return dest; + while (*str) + { + str++; + } + + for (u32 i = 0;; i++) + { + if (!(str[i] = src[i])) + { + return dst; + } + } } vm::cptr _sys_strchr(vm::cptr str, s32 ch)