From 13304bd18bf25c9b829828fa2e15048da9c2c22c Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 17 Sep 2017 14:46:57 +0300 Subject: [PATCH] Rewrite _sys_strcat --- rpcs3/Emu/Cell/Modules/sys_libc_.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) 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)