cellOskDialog: add some param checks

This commit is contained in:
Megamouse 2019-10-06 11:32:54 +02:00
parent aa659f3c36
commit d402507be2
2 changed files with 48 additions and 12 deletions

View file

@ -1,4 +1,4 @@
#include "stdafx.h"
#include "stdafx.h"
#include "Emu/System.h"
#include "Emu/IdManager.h"
#include "Emu/Cell/PPUModule.h"
@ -448,6 +448,12 @@ error_code cellOskDialogDisableDimmer()
error_code cellOskDialogSetKeyLayoutOption(u32 option)
{
cellOskDialog.todo("cellOskDialogSetKeyLayoutOption(option=0x%x)", option);
if (option == 0 || option > 3) // CELL_OSKDIALOG_10KEY_PANEL OR CELL_OSKDIALOG_FULLKEY_PANEL
{
return CELL_OSKDIALOG_ERROR_PARAM;
}
return CELL_OK;
}
@ -475,16 +481,40 @@ error_code cellOskDialogExtInputDeviceUnlock()
return CELL_OK;
}
error_code register_keyboard_event_hook_callback(u16 hookEventMode, vm::ptr<cellOskDialogHardwareKeyboardEventHookCallback> pCallback)
{
cellOskDialog.todo("register_keyboard_event_hook_callback(hookEventMode=%u, pCallback=*0x%x)", hookEventMode, pCallback);
if (!pCallback)
{
return CELL_OSKDIALOG_ERROR_PARAM;
}
return CELL_OK;
}
error_code cellOskDialogExtRegisterKeyboardEventHookCallback(u16 hookEventMode, vm::ptr<cellOskDialogHardwareKeyboardEventHookCallback> pCallback)
{
cellOskDialog.todo("cellOskDialogExtRegisterKeyboardEventHookCallback(hookEventMode=%u, pCallback=*0x%x)", hookEventMode, pCallback);
return CELL_OK;
if (hookEventMode == 0 || hookEventMode > 3) // CELL_OSKDIALOG_EVENT_HOOK_TYPE_FUNCTION_KEY OR CELL_OSKDIALOG_EVENT_HOOK_TYPE_ASCII_KEY
{
return CELL_OSKDIALOG_ERROR_PARAM;
}
return register_keyboard_event_hook_callback(hookEventMode, pCallback);
}
error_code cellOskDialogExtRegisterKeyboardEventHookCallbackEx(u16 hookEventMode, vm::ptr<cellOskDialogHardwareKeyboardEventHookCallback> pCallback)
{
cellOskDialog.todo("cellOskDialogExtRegisterKeyboardEventHookCallbackEx(hookEventMode=%u, pCallback=*0x%x)", hookEventMode, pCallback);
return CELL_OK;
if (hookEventMode == 0 || hookEventMode > 7) // CELL_OSKDIALOG_EVENT_HOOK_TYPE_FUNCTION_KEY OR CELL_OSKDIALOG_EVENT_HOOK_TYPE_ASCII_KEY OR CELL_OSKDIALOG_EVENT_HOOK_TYPE_ONLY_MODIFIER
{
return CELL_OSKDIALOG_ERROR_PARAM;
}
return register_keyboard_event_hook_callback(hookEventMode, pCallback);
}
error_code cellOskDialogExtAddJapaneseOptionDictionary(vm::cpptr<char> filePath)
@ -590,6 +620,12 @@ error_code cellOskDialogExtEnableHalfByteKana()
error_code cellOskDialogExtRegisterForceFinishCallback(vm::ptr<cellOskDialogForceFinishCallback> pCallback)
{
cellOskDialog.todo("cellOskDialogExtRegisterForceFinishCallback(pCallback=*0x%x)", pCallback);
if (!pCallback)
{
return CELL_OSKDIALOG_ERROR_PARAM;
}
return CELL_OK;
}

View file

@ -6,21 +6,21 @@
enum CellOskDialogError : u32
{
CELL_OSKDIALOG_ERROR_IME_ALREADY_IN_USE = 0x8002b501,
CELL_OSKDIALOG_ERROR_GET_SIZE_ERROR = 0x8002b502,
CELL_OSKDIALOG_ERROR_UNKNOWN = 0x8002b503,
CELL_OSKDIALOG_ERROR_PARAM = 0x8002b504,
CELL_OSKDIALOG_ERROR_GET_SIZE_ERROR = 0x8002b502,
CELL_OSKDIALOG_ERROR_UNKNOWN = 0x8002b503,
CELL_OSKDIALOG_ERROR_PARAM = 0x8002b504,
};
// OSK status for the callback
enum
{
CELL_SYSUTIL_OSKDIALOG_LOADED = 0x0502,
CELL_SYSUTIL_OSKDIALOG_FINISHED = 0x0503,
CELL_SYSUTIL_OSKDIALOG_UNLOADED = 0x0504,
CELL_SYSUTIL_OSKDIALOG_INPUT_ENTERED = 0x0505,
CELL_SYSUTIL_OSKDIALOG_INPUT_CANCELED = 0x0506,
CELL_SYSUTIL_OSKDIALOG_LOADED = 0x0502,
CELL_SYSUTIL_OSKDIALOG_FINISHED = 0x0503,
CELL_SYSUTIL_OSKDIALOG_UNLOADED = 0x0504,
CELL_SYSUTIL_OSKDIALOG_INPUT_ENTERED = 0x0505,
CELL_SYSUTIL_OSKDIALOG_INPUT_CANCELED = 0x0506,
CELL_SYSUTIL_OSKDIALOG_INPUT_DEVICE_CHANGED = 0x0507,
CELL_SYSUTIL_OSKDIALOG_DISPLAY_CHANGED = 0x0508,
CELL_SYSUTIL_OSKDIALOG_DISPLAY_CHANGED = 0x0508,
};
enum CellOskDialogInputFieldResult