1
0
Fork 0

applets/swkbd: Remove text memory clearing

The text shared memory wasn't supposed to be cleared according to my comparison with the LLE swkbd. This can cause issues in certain games such as Harvest Moon.

A null terminator is added to the text copied to mark the end of the string.
This commit is contained in:
zhupengfei 2019-12-01 23:00:09 +08:00
parent 866df2644b
commit 17ba846a3f
No known key found for this signature in database
GPG Key ID: DD129E108BD09378
1 changed files with 2 additions and 4 deletions

View File

@ -99,9 +99,6 @@ ResultCode SoftwareKeyboard::StartImpl(Service::APT::AppletStartupParameter cons
memcpy(&config, parameter.buffer.data(), parameter.buffer.size()); memcpy(&config, parameter.buffer.data(), parameter.buffer.size());
text_memory = std::static_pointer_cast<Kernel::SharedMemory, Kernel::Object>(parameter.object); text_memory = std::static_pointer_cast<Kernel::SharedMemory, Kernel::Object>(parameter.object);
// TODO(Subv): Verify if this is the correct behavior
memset(text_memory->GetPointer(), 0, text_memory->GetSize());
DrawScreenKeyboard(); DrawScreenKeyboard();
using namespace Frontend; using namespace Frontend;
@ -121,7 +118,8 @@ void SoftwareKeyboard::Update() {
using namespace Frontend; using namespace Frontend;
const KeyboardData& data = frontend_applet->ReceiveData(); const KeyboardData& data = frontend_applet->ReceiveData();
std::u16string text = Common::UTF8ToUTF16(data.text); std::u16string text = Common::UTF8ToUTF16(data.text);
memcpy(text_memory->GetPointer(), text.c_str(), text.length() * sizeof(char16_t)); // Include a null terminator
memcpy(text_memory->GetPointer(), text.c_str(), (text.length() + 1) * sizeof(char16_t));
switch (config.num_buttons_m1) { switch (config.num_buttons_m1) {
case SoftwareKeyboardButtonConfig::SingleButton: case SoftwareKeyboardButtonConfig::SingleButton:
config.return_code = SoftwareKeyboardResult::D0Click; config.return_code = SoftwareKeyboardResult::D0Click;