mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-30 23:36:26 -05:00
d26a46feed
Rightnow, in games use GetAvailableLanguageCodes(), there is a WriteBuffer() with size larger than the buffer_size. (Core Critical core\hle\kernel\hle_ipc.cpp:WriteBuffer:296: size (0000000000000088) is greater than buffer_size (0000000000000078)) 0x88 = 17(languages) * 8 0x78 = 15(languages) * 8 GetAvailableLanguageCodes() can only support 15 languages. After firmware 4.0.0 there are 17 supported language instead of 15, to enable this GetAvailableLanguageCodes2() need to be used. So GetAvailableLanguageCodes() will be caped at 15 languages. Reference: http://switchbrew.org/index.php/Settings_services
46 lines
1.4 KiB
C++
46 lines
1.4 KiB
C++
// Copyright 2018 yuzu emulator team
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include "core/hle/service/service.h"
|
|
|
|
namespace Service::Set {
|
|
|
|
/// This is "nn::settings::LanguageCode", which is a NUL-terminated string stored in a u64.
|
|
enum class LanguageCode : u64 {
|
|
JA = 0x000000000000616A,
|
|
EN_US = 0x00000053552D6E65,
|
|
FR = 0x0000000000007266,
|
|
DE = 0x0000000000006564,
|
|
IT = 0x0000000000007469,
|
|
ES = 0x0000000000007365,
|
|
ZH_CN = 0x0000004E432D687A,
|
|
KO = 0x0000000000006F6B,
|
|
NL = 0x0000000000006C6E,
|
|
PT = 0x0000000000007470,
|
|
RU = 0x0000000000007572,
|
|
ZH_TW = 0x00000057542D687A,
|
|
EN_GB = 0x00000042472D6E65,
|
|
FR_CA = 0x00000041432D7266,
|
|
ES_419 = 0x00003931342D7365,
|
|
ZH_HANS = 0x00736E61482D687A,
|
|
ZH_HANT = 0x00746E61482D687A,
|
|
};
|
|
LanguageCode GetLanguageCodeFromIndex(size_t idx);
|
|
|
|
class SET final : public ServiceFramework<SET> {
|
|
public:
|
|
explicit SET();
|
|
~SET() = default;
|
|
|
|
private:
|
|
void GetLanguageCode(Kernel::HLERequestContext& ctx);
|
|
void GetAvailableLanguageCodes(Kernel::HLERequestContext& ctx);
|
|
void GetAvailableLanguageCodes2(Kernel::HLERequestContext& ctx);
|
|
void GetAvailableLanguageCodeCount(Kernel::HLERequestContext& ctx);
|
|
void GetAvailableLanguageCodeCount2(Kernel::HLERequestContext& ctx);
|
|
};
|
|
|
|
} // namespace Service::Set
|