From 1813513b08135e0ec99b3ac1e3288a17c29610b1 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 20 Jul 2013 22:02:10 -0700 Subject: [PATCH] Implement sceCccStrlen*(). --- Core/HLE/sceCcc.cpp | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/Core/HLE/sceCcc.cpp b/Core/HLE/sceCcc.cpp index 08524d0855..fc0a09c7ea 100644 --- a/Core/HLE/sceCcc.cpp +++ b/Core/HLE/sceCcc.cpp @@ -93,20 +93,44 @@ int sceCccSJIStoUTF16(u32 dstAddr, int dstSize, u32 srcAddr) int sceCccStrlenUTF8(u32 strAddr) { - DEBUG_LOG(HLE, "sceCccStrlenUTF8(%08x)", strAddr); - return u8_strlen(Memory::GetCharPointer(strAddr)); + PSPCharPointer str; + str = strAddr; + + if (!str.IsValid()) + { + ERROR_LOG(HLE, "sceCccStrlenUTF8(%08x): invalid pointer", strAddr); + return 0; + } + DEBUG_LOG(HLE, "sceCccStrlenUTF8(%08x): invalid pointer", strAddr); + return UTF8(str).length(); } int sceCccStrlenUTF16(u32 strAddr) { - ERROR_LOG_REPORT(HLE, "UNIMPL sceCccStrlenUTF16(%08x)", strAddr); - return 0; + PSPWCharPointer str; + str = strAddr; + + if (!str.IsValid()) + { + ERROR_LOG(HLE, "sceCccStrlenUTF16(%08x): invalid pointer", strAddr); + return 0; + } + DEBUG_LOG(HLE, "sceCccStrlenUTF16(%08x): invalid pointer", strAddr); + return UTF16LE(str).length(); } int sceCccStrlenSJIS(u32 strAddr) { - ERROR_LOG_REPORT(HLE, "UNIMPL sceCccStrlenSJIS(%08x)", strAddr); - return 0; + PSPCharPointer str; + str = strAddr; + + if (!str.IsValid()) + { + ERROR_LOG(HLE, "sceCccStrlenSJIS(%08x): invalid pointer", strAddr); + return 0; + } + DEBUG_LOG(HLE, "sceCccStrlenSJIS(%08x): invalid pointer", strAddr); + return ShiftJIS(str).length(); } int sceCccEncodeUTF8(u32 dstAddr, u32 ucs)