diff --git a/src/xenia/vfs/devices/stfs_container_device.h b/src/xenia/vfs/devices/stfs_container_device.h index 6823bc91b..e95d4050e 100644 --- a/src/xenia/vfs/devices/stfs_container_device.h +++ b/src/xenia/vfs/devices/stfs_container_device.h @@ -10,6 +10,7 @@ #ifndef XENIA_VFS_DEVICES_STFS_CONTAINER_DEVICE_H_ #define XENIA_VFS_DEVICES_STFS_CONTAINER_DEVICE_H_ +#include #include #include #include @@ -202,15 +203,15 @@ struct XContentMetadata { uint8_t title_thumbnail[0x3D00]; wchar_t description_ex[3][0x80]; - std::wstring get_display_name(uint32_t locale) { - uint32_t locale_id = locale; - locale_id--; + std::wstring get_display_name(XLanguage lang) { + uint32_t lang_id = (uint32_t)lang; + lang_id--; wchar_t* str = 0; - if (locale_id >= 0 && locale_id < 9) { - str = display_name[locale_id]; - } else if (locale_id >= 9 && locale_id < 12 && metadata_version >= 2) { - str = display_name_ex[locale_id - 9]; + if (lang_id >= 0 && lang_id < 9) { + str = display_name[lang_id]; + } else if (lang_id >= 9 && lang_id < 12 && metadata_version >= 2) { + str = display_name_ex[lang_id - 9]; } if (!str) { return L""; @@ -222,15 +223,15 @@ struct XContentMetadata { return std::wstring(wstr.data()); } - std::wstring get_description(uint32_t locale) { - uint32_t locale_id = locale; - locale_id--; + std::wstring get_description(XLanguage lang) { + uint32_t lang_id = (uint32_t)lang; + lang_id--; wchar_t* str = 0; - if (locale_id >= 0 && locale_id < 9) { - str = display_name[locale_id]; - } else if (locale_id >= 9 && locale_id < 12 && metadata_version >= 2) { - str = display_name_ex[locale_id - 9]; + if (lang_id >= 0 && lang_id < 9) { + str = display_name[lang_id]; + } else if (lang_id >= 9 && lang_id < 12 && metadata_version >= 2) { + str = display_name_ex[lang_id - 9]; } if (!str) { return L""; @@ -256,6 +257,53 @@ struct XContentMetadata { return std::wstring(wstr.data()); } + + bool set_display_name(const std::wstring& value, XLanguage lang) { + uint32_t lang_id = (uint32_t)lang; + lang_id--; + + wchar_t* str = 0; + if (lang_id >= 0 && lang_id < 9) { + str = display_name[lang_id]; + } else if (lang_id >= 9 && lang_id < 12 && metadata_version >= 2) { + str = display_name_ex[lang_id - 9]; + } + if (!str) { + return false; + } + + xe::copy_and_swap(str, value.c_str(), + std::min(value.length(), (size_t)128)); + return true; + } + bool set_description(const std::wstring& value, XLanguage lang) { + uint32_t lang_id = (uint32_t)lang; + lang_id--; + + wchar_t* str = 0; + if (lang_id >= 0 && lang_id < 9) { + str = description[lang_id]; + } else if (lang_id >= 9 && lang_id < 12 && metadata_version >= 2) { + str = description_ex[lang_id - 9]; + } + if (!str) { + return false; + } + + xe::copy_and_swap(str, value.c_str(), + std::min(value.length(), (size_t)128)); + return true; + } + bool set_publisher(const std::wstring& value) { + xe::copy_and_swap(publisher, value.c_str(), + std::min(value.length(), (size_t)128)); + return true; + } + bool set_title_name(const std::wstring& value) { + xe::copy_and_swap(title_name, value.c_str(), + std::min(value.length(), (size_t)128)); + return true; + } }; static_assert_size(XContentMetadata, 0x93D6); #pragma pack(pop)