From 1fe7242e473538654d4484c2454bb3a90cf9c2fc Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 20 Apr 2013 09:01:03 -0700 Subject: [PATCH 1/3] Store parental level as an integer. --- Core/Config.cpp | 4 ++-- Core/Config.h | 2 +- Core/HLE/sceUtility.cpp | 6 ++---- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Core/Config.cpp b/Core/Config.cpp index 9975475557..11fa99a200 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -125,7 +125,7 @@ void Config::Load(const char *iniFileName) pspConfig->Get("TimeZone", &iTimeZone, 0); pspConfig->Get("DayLightSavings", &bDayLightSavings, PSP_SYSTEMPARAM_DAYLIGHTSAVINGS_STD); pspConfig->Get("ButtonPreference", &bButtonPreference, PSP_SYSTEMPARAM_BUTTON_CIRCLE); - pspConfig->Get("LockParentalLevel", &bLockParentalLevel, PSP_SYSTEMPARAM_TIME_FORMAT_24HR); + pspConfig->Get("LockParentalLevel", &iLockParentalLevel, 0); pspConfig->Get("WlanAdhocChannel", &iWlanAdhocChannel, PSP_SYSTEMPARAM_ADHOC_CHANNEL_AUTOMATIC); pspConfig->Get("WlanPowerSave", &bWlanPowerSave, PSP_SYSTEMPARAM_WLAN_POWERSAVE_OFF); pspConfig->Get("EncryptSave", &bEncryptSave, true); @@ -202,7 +202,7 @@ void Config::Save() pspConfig->Set("TimeZone", iTimeZone); pspConfig->Set("DayLightSavings", bDayLightSavings); pspConfig->Set("ButtonPreference", bButtonPreference); - pspConfig->Set("LockParentalLevel", bLockParentalLevel); + pspConfig->Set("LockParentalLevel", iLockParentalLevel); pspConfig->Set("WlanAdhocChannel", iWlanAdhocChannel); pspConfig->Set("WlanPowerSave", bWlanPowerSave); pspConfig->Set("EncryptSave", bEncryptSave); diff --git a/Core/Config.h b/Core/Config.h index ccbe048435..de0bf3fbdd 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -94,7 +94,7 @@ public: int iTimeZone; bool bDayLightSavings; bool bButtonPreference; - bool bLockParentalLevel; + int iLockParentalLevel; bool bEncryptSave; int iWlanAdhocChannel; bool bWlanPowerSave; diff --git a/Core/HLE/sceUtility.cpp b/Core/HLE/sceUtility.cpp index 846fe5fe1d..45ade566c9 100644 --- a/Core/HLE/sceUtility.cpp +++ b/Core/HLE/sceUtility.cpp @@ -367,11 +367,10 @@ int sceUtilityGamedataInstallGetStatus() //TODO: should save to config file u32 sceUtilitySetSystemParamString(u32 id, u32 strPtr) { - DEBUG_LOG(HLE,"sceUtilitySetSystemParamString(%i, %08x)", id,strPtr); + WARN_LOG(HLE, "sceUtilitySetSystemParamString(%i, %08x)", id, strPtr); return 0; } -//TODO: Should load from config file u32 sceUtilityGetSystemParamString(u32 id, u32 destaddr, u32 unknownparam) { DEBUG_LOG(HLE,"sceUtilityGetSystemParamString(%i, %08x, %i)", id,destaddr,unknownparam); @@ -419,8 +418,7 @@ u32 sceUtilityGetSystemParamInt(u32 id, u32 destaddr) param = g_Config.bButtonPreference?PSP_SYSTEMPARAM_BUTTON_CROSS:PSP_SYSTEMPARAM_BUTTON_CIRCLE; break; case PSP_SYSTEMPARAM_ID_INT_LOCK_PARENTAL_LEVEL: - // TODO - param = 0; + param = g_Config.iLockParentalLevel; break; default: return PSP_SYSTEMPARAM_RETVAL_FAIL; From b264915d2829cbb2e6f72bf8d2f26ef9fc482773 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 20 Apr 2013 09:30:46 -0700 Subject: [PATCH 2/3] Correct sceUtilityGetSystemParamString() per tests. --- Core/HLE/sceUtility.cpp | 12 +++++++----- Core/HLE/sceUtility.h | 5 +++-- headless/Headless.cpp | 5 +++++ 3 files changed, 15 insertions(+), 7 deletions(-) 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__) From 1465ff5685b6ad764d930bef2bd51cfd75420464 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 20 Apr 2013 09:39:12 -0700 Subject: [PATCH 3/3] Update tests. --- pspautotests | 2 +- test.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pspautotests b/pspautotests index 8149a0b9af..a46907d2fc 160000 --- a/pspautotests +++ b/pspautotests @@ -1 +1 @@ -Subproject commit 8149a0b9afda4757e01f511686f49b247cadf793 +Subproject commit a46907d2fc1a827158e59188888dec3acc6231f8 diff --git a/test.py b/test.py index 8ef91e3797..cd010f8a64 100755 --- a/test.py +++ b/test.py @@ -144,6 +144,7 @@ tests_good = [ "threads/vpl/refer", "threads/vpl/try", "threads/vpl/vpl", + "utility/systemparam/systemparam", "power/power", "umd/callbacks/umd", "umd/wait/wait", @@ -186,7 +187,6 @@ tests_next = [ "sysmem/sysmem", "umd/io/umd_io", "umd/raw_access/raw_access", - "utility/systemparam/systemparam", "video/pmf/pmf", "video/pmf_simple/pmf_simple", ]