diff --git a/Core/HLE/sceUtility.cpp b/Core/HLE/sceUtility.cpp index 45ade566c9..f04ef07b0b 100644 --- a/Core/HLE/sceUtility.cpp +++ b/Core/HLE/sceUtility.cpp @@ -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(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"}, {0x45c18506, 0, "sceUtilitySetSystemParamInt"}, - {0x34b78343, &WrapU_UUU, "sceUtilityGetSystemParamString"}, + {0x34b78343, &WrapU_UUI, "sceUtilityGetSystemParamString"}, {0xA5DA2406, &WrapU_UU, "sceUtilityGetSystemParamInt"}, diff --git a/Core/HLE/sceUtility.h b/Core/HLE/sceUtility.h index 6570224641..39cb4527cc 100644 --- a/Core/HLE/sceUtility.h +++ b/Core/HLE/sceUtility.h @@ -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 diff --git a/headless/Headless.cpp b/headless/Headless.cpp index f1502fa5c5..1e935a8663 100644 --- a/headless/Headless.cpp +++ b/headless/Headless.cpp @@ -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__)