Correct sceUtilityGetSystemParamString() per tests.

This commit is contained in:
Unknown W. Brackets 2013-04-20 09:30:46 -07:00
parent 1fe7242e47
commit b264915d28
3 changed files with 15 additions and 7 deletions

View File

@ -371,14 +371,16 @@ u32 sceUtilitySetSystemParamString(u32 id, u32 strPtr)
return 0;
}
u32 sceUtilityGetSystemParamString(u32 id, u32 destaddr, u32 unknownparam)
u32 sceUtilityGetSystemParamString(u32 id, u32 destaddr, int destSize)
{
DEBUG_LOG(HLE,"sceUtilityGetSystemParamString(%i, %08x, %i)", id,destaddr,unknownparam);
DEBUG_LOG(HLE, "sceUtilityGetSystemParamString(%i, %08x, %i)", id, destaddr, destSize);
char *buf = (char *)Memory::GetPointer(destaddr);
switch (id) {
case PSP_SYSTEMPARAM_ID_STRING_NICKNAME:
strncpy(buf, g_Config.sNickName.c_str(), std::min<u32>(16, g_Config.sNickName.length()));
buf[15] = 0;
// If there's not enough space for the string and null terminator, fail.
if (destSize <= (int)g_Config.sNickName.length())
return PSP_SYSTEMPARAM_RETVAL_STRING_TOO_LONG;
strncpy(buf, g_Config.sNickName.c_str(), destSize);
break;
default:
@ -478,7 +480,7 @@ const HLEFunction sceUtility[] =
{0x41e30674, &WrapU_UU<sceUtilitySetSystemParamString>, "sceUtilitySetSystemParamString"},
{0x45c18506, 0, "sceUtilitySetSystemParamInt"},
{0x34b78343, &WrapU_UUU<sceUtilityGetSystemParamString>, "sceUtilityGetSystemParamString"},
{0x34b78343, &WrapU_UUI<sceUtilityGetSystemParamString>, "sceUtilityGetSystemParamString"},
{0xA5DA2406, &WrapU_UU<sceUtilityGetSystemParamInt>, "sceUtilityGetSystemParamInt"},

View File

@ -49,8 +49,9 @@ class PointerWrap;
#define PSP_SYSTEMPARAM_ID_INT_LOCK_PARENTAL_LEVEL 10
// Return values for the SystemParam functions
#define PSP_SYSTEMPARAM_RETVAL_OK 0
#define PSP_SYSTEMPARAM_RETVAL_FAIL 0x80110103
#define PSP_SYSTEMPARAM_RETVAL_OK 0
#define PSP_SYSTEMPARAM_RETVAL_STRING_TOO_LONG 0x80110102
#define PSP_SYSTEMPARAM_RETVAL_FAIL 0x80110103
// Valid values for PSP_SYSTEMPARAM_ID_INT_ADHOC_CHANNEL
#define PSP_SYSTEMPARAM_ADHOC_CHANNEL_AUTOMATIC 0

View File

@ -203,6 +203,11 @@ int main(int argc, const char* argv[])
g_Config.ilanguage = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH;
g_Config.itimeformat = PSP_SYSTEMPARAM_TIME_FORMAT_24HR;
g_Config.bEncryptSave = true;
g_Config.sNickName = "shadow";
g_Config.iTimeZone = 60;
g_Config.iDateFormat = PSP_SYSTEMPARAM_DATE_FORMAT_DDMMYYYY;
g_Config.bButtonPreference = true;
g_Config.iLockParentalLevel = 9;
#if defined(ANDROID)
#elif defined(BLACKBERRY) || defined(__SYMBIAN32__)