From 22ff8abd7d9331c24b36ee594ad4733162176a93 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 17 Sep 2017 16:49:33 +0300 Subject: [PATCH] Rewrite _sys_strncpy --- rpcs3/Emu/Cell/Modules/sys_libc_.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/rpcs3/Emu/Cell/Modules/sys_libc_.cpp b/rpcs3/Emu/Cell/Modules/sys_libc_.cpp index 3890373c44..cfb6e84cc1 100644 --- a/rpcs3/Emu/Cell/Modules/sys_libc_.cpp +++ b/rpcs3/Emu/Cell/Modules/sys_libc_.cpp @@ -297,18 +297,29 @@ vm::ptr _sys_strcpy(vm::ptr dst, vm::cptr src) } } -vm::ptr _sys_strncpy(vm::ptr dest, vm::cptr source, u32 len) +vm::ptr _sys_strncpy(vm::ptr dst, vm::cptr src, s32 len) { - sysPrxForUser.trace("_sys_strncpy(dest=*0x%x, source=%s, len=%d)", dest, source, len); + sysPrxForUser.trace("_sys_strncpy(dst=*0x%x %s, src=%s, len=%d)", dst, dst, src, len); - if (!dest || !source) + if (!dst || !src) { return vm::null; } - verify(HERE), std::strncpy(dest.get_ptr(), source.get_ptr(), len) == dest.get_ptr(); + for (s32 i = 0; i < len; i++) + { + if (!(dst[i] = src[i])) + { + for (++i; i < len; i++) + { + dst[i] = '\0'; + } - return dest; + return dst; + } + } + + return dst; } s32 _sys_strncasecmp(vm::cptr str1, vm::cptr str2, u32 n)