summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorLeo Lam <leolino.lam@gmail.com>2017-07-24 14:03:33 +0800
committerGitHub <noreply@github.com>2017-07-24 14:03:33 +0800
commitc27dd9dc20a216bcb604b2aff619d21f41d4c162 (patch)
tree895752e3aa60015bdeaa1184e606a7947f8806ed /Source/Core
parenta23a38da23043cf55a24e69ae631b5fdac2fa82a (diff)
parent02f32a9b2670ec7df3e8ae947b1b755d6933b5b6 (diff)
Merge pull request #5785 from leoetlino/sysconf-fix
SysConf: Minor fixes
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Common/SysConf.cpp30
-rw-r--r--Source/Core/Core/IOS/USB/Bluetooth/BTBase.cpp9
-rw-r--r--Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp8
-rw-r--r--Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h2
4 files changed, 24 insertions, 25 deletions
diff --git a/Source/Core/Common/SysConf.cpp b/Source/Core/Common/SysConf.cpp
index 4e5e88fb83..422bbb3f2e 100644
--- a/Source/Core/Common/SysConf.cpp
+++ b/Source/Core/Common/SysConf.cpp
@@ -100,14 +100,15 @@ bool SysConf::LoadFromFile(const std::string& file_name)
{
u16 data_length = 0;
file.ReadBytes(&data_length, sizeof(data_length));
- data.resize(Common::swap16(data_length));
+ // The stored u16 is length - 1, not length.
+ data.resize(Common::swap16(data_length) + 1);
break;
}
case Entry::Type::SmallArray:
{
u8 data_length = 0;
file.ReadBytes(&data_length, sizeof(data_length));
- data.resize(data_length);
+ data.resize(data_length + 1);
break;
}
case Entry::Type::Byte:
@@ -165,20 +166,17 @@ bool SysConf::Save() const
case Entry::Type::BigArray:
{
const u16 data_size = static_cast<u16>(item.bytes.size());
- AppendToBuffer<u16>(&entries, data_size);
+ // length - 1 is stored, not length.
+ AppendToBuffer<u16>(&entries, data_size - 1);
entries.insert(entries.end(), item.bytes.cbegin(), item.bytes.cbegin() + data_size);
- // Unused byte.
- entries.insert(entries.end(), '\0');
break;
}
case Entry::Type::SmallArray:
{
const u8 data_size = static_cast<u8>(item.bytes.size());
- AppendToBuffer<u8>(&entries, data_size);
+ AppendToBuffer<u8>(&entries, data_size - 1);
entries.insert(entries.end(), item.bytes.cbegin(), item.bytes.cbegin() + data_size);
- // Unused byte.
- entries.insert(entries.end(), '\0');
break;
}
@@ -272,22 +270,26 @@ void SysConf::ApplySettingsFromMovie()
void SysConf::InsertDefaultEntries()
{
- AddEntry({Entry::Type::BigArray, "BT.DINF", std::vector<u8>(0x460)});
- AddEntry({Entry::Type::BigArray, "BT.CDIF", std::vector<u8>(0x204)});
+ AddEntry({Entry::Type::BigArray, "BT.DINF", std::vector<u8>(0x460 + 1)});
+ AddEntry({Entry::Type::BigArray, "BT.CDIF", std::vector<u8>(0x204 + 1)});
AddEntry({Entry::Type::Long, "BT.SENS", {0, 0, 0, 3}});
AddEntry({Entry::Type::Byte, "BT.BAR", {1}});
AddEntry({Entry::Type::Byte, "BT.SPKV", {0x58}});
AddEntry({Entry::Type::Byte, "BT.MOT", {1}});
- const std::vector<u8> console_nick = {0, 'd', 0, 'o', 0, 'l', 0, 'p', 0, 'h', 0, 'i', 0, 'n'};
+ std::vector<u8> console_nick = {0, 'd', 0, 'o', 0, 'l', 0, 'p', 0, 'h', 0, 'i', 0, 'n'};
+ // 22 bytes: 2 bytes per character (10 characters maximum),
+ // 1 for a null terminating character, 1 for the string length
+ console_nick.resize(22);
+ console_nick[21] = static_cast<u8>(strlen("dolphin"));
AddEntry({Entry::Type::SmallArray, "IPL.NIK", std::move(console_nick)});
AddEntry({Entry::Type::Byte, "IPL.LNG", {1}});
- std::vector<u8> ipl_sadr(0x1007);
+ std::vector<u8> ipl_sadr(0x1007 + 1);
ipl_sadr[0] = 0x6c;
AddEntry({Entry::Type::BigArray, "IPL.SADR", std::move(ipl_sadr)});
- std::vector<u8> ipl_pc(0x50);
+ std::vector<u8> ipl_pc(0x49 + 1);
ipl_pc[1] = 0x04;
ipl_pc[2] = 0x14;
AddEntry({Entry::Type::SmallArray, "IPL.PC", std::move(ipl_pc)});
@@ -305,7 +307,7 @@ void SysConf::InsertDefaultEntries()
AddEntry({Entry::Type::Byte, "IPL.DH", {0}});
AddEntry({Entry::Type::Long, "IPL.INC", {0, 0, 0, 8}});
AddEntry({Entry::Type::Long, "IPL.FRC", {0, 0, 0, 0x28}});
- AddEntry({Entry::Type::SmallArray, "IPL.IDL", {0}});
+ AddEntry({Entry::Type::SmallArray, "IPL.IDL", {0, 1}});
AddEntry({Entry::Type::Long, "NET.WCFG", {0, 0, 0, 1}});
AddEntry({Entry::Type::Long, "NET.CTPC", std::vector<u8>(4)});
diff --git a/Source/Core/Core/IOS/USB/Bluetooth/BTBase.cpp b/Source/Core/Core/IOS/USB/Bluetooth/BTBase.cpp
index ada80f2f17..75e8fef2a0 100644
--- a/Source/Core/Core/IOS/USB/Bluetooth/BTBase.cpp
+++ b/Source/Core/Core/IOS/USB/Bluetooth/BTBase.cpp
@@ -19,11 +19,9 @@ namespace IOS
{
namespace HLE
{
-constexpr u16 BT_INFO_SECTION_LENGTH = 0x460;
-
void BackUpBTInfoSection(const SysConf* sysconf)
{
- const std::string filename = File::GetUserPath(D_SESSION_WIIROOT_IDX) + DIR_SEP WII_BTDINF_BACKUP;
+ const std::string filename = File::GetUserPath(D_CONFIG_IDX) + DIR_SEP WII_BTDINF_BACKUP;
if (File::Exists(filename))
return;
File::IOFile backup(filename, "wb");
@@ -39,18 +37,17 @@ void BackUpBTInfoSection(const SysConf* sysconf)
void RestoreBTInfoSection(SysConf* sysconf)
{
- const std::string filename = File::GetUserPath(D_SESSION_WIIROOT_IDX) + DIR_SEP WII_BTDINF_BACKUP;
+ const std::string filename = File::GetUserPath(D_CONFIG_IDX) + DIR_SEP WII_BTDINF_BACKUP;
File::IOFile backup(filename, "rb");
if (!backup)
return;
- std::vector<u8> section(BT_INFO_SECTION_LENGTH);
+ auto& section = sysconf->GetOrAddEntry("BT.DINF", SysConf::Entry::Type::BigArray)->bytes;
if (!backup.ReadBytes(section.data(), section.size()))
{
ERROR_LOG(IOS_WIIMOTE, "Failed to read backed up BT.DINF section");
return;
}
- sysconf->GetOrAddEntry("BT.DINF", SysConf::Entry::Type::BigArray)->bytes = std::move(section);
File::Delete(filename);
}
} // namespace HLE
diff --git a/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp b/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp
index 98aaf7393f..0761720c9c 100644
--- a/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp
+++ b/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp
@@ -47,7 +47,7 @@ BluetoothEmu::BluetoothEmu(Kernel& ios, const std::string& device_name)
if (!Core::WantsDeterminism())
BackUpBTInfoSection(&sysconf);
- _conf_pads BT_DINF;
+ _conf_pads BT_DINF{};
bdaddr_t tmpBD;
u8 i = 0;
while (i < MAX_BBMOTES)
@@ -78,9 +78,9 @@ BluetoothEmu::BluetoothEmu(Kernel& ios, const std::string& device_name)
// save now so that when games load sysconf file it includes the new Wii Remotes
// and the correct order for connected Wii Remotes
- std::vector<u8> data(sizeof(_conf_pads));
- std::memcpy(data.data(), &BT_DINF, data.size());
- sysconf.GetOrAddEntry("BT.DINF", SysConf::Entry::Type::BigArray)->bytes = std::move(data);
+ auto& section = sysconf.GetOrAddEntry("BT.DINF", SysConf::Entry::Type::BigArray)->bytes;
+ section.resize(sizeof(_conf_pads));
+ std::memcpy(section.data(), &BT_DINF, sizeof(_conf_pads));
if (!sysconf.Save())
PanicAlertT("Failed to write BT.DINF to SYSCONF");
}
diff --git a/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h b/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h
index c772ce6a50..0e6f4d0173 100644
--- a/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h
+++ b/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h
@@ -191,7 +191,7 @@ private:
u8 num_registered;
_conf_pad_device registered[CONF_PAD_MAX_REGISTERED];
_conf_pad_device active[MAX_BBMOTES];
- u8 unknown[0x45];
+ _conf_pad_device unknown;
};
#pragma pack(pop)
};