mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 02:34:11 +01:00 
			
		
		
		
	service: set: Fix GetSettingsItemValue
This commit is contained in:
		
							parent
							
								
									05f94dc5fc
								
							
						
					
					
						commit
						9fccccedee
					
				| @ -26,12 +26,9 @@ Service::PSC::Time::SystemClockContext g_report_ephemeral_clock_context{}; | |||||||
| template <typename T> | template <typename T> | ||||||
| T GetSettingsItemValue(std::shared_ptr<Service::Set::ISystemSettingsServer>& set_sys, | T GetSettingsItemValue(std::shared_ptr<Service::Set::ISystemSettingsServer>& set_sys, | ||||||
|                        const char* category, const char* name) { |                        const char* category, const char* name) { | ||||||
|     std::vector<u8> interval_buf; |  | ||||||
|     auto res = set_sys->GetSettingsItemValueImpl(interval_buf, category, name); |  | ||||||
|     ASSERT(res == ResultSuccess); |  | ||||||
| 
 |  | ||||||
|     T v{}; |     T v{}; | ||||||
|     std::memcpy(&v, interval_buf.data(), sizeof(T)); |     auto res = set_sys->GetSettingsItemValueImpl(v, category, name); | ||||||
|  |     ASSERT(res == ResultSuccess); | ||||||
|     return v; |     return v; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -308,7 +308,7 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_) | |||||||
|     SetupSettings(); |     SetupSettings(); | ||||||
| 
 | 
 | ||||||
|     m_system_settings.region_code = |     m_system_settings.region_code = | ||||||
|         static_cast<SystemRegionCode>(Settings::values.region_index.GetValue()); |         static_cast<SystemRegionCode>(::Settings::values.region_index.GetValue()); | ||||||
| 
 | 
 | ||||||
|     // TODO: Remove this when starter applet is fully functional
 |     // TODO: Remove this when starter applet is fully functional
 | ||||||
|     EulaVersion eula_version{ |     EulaVersion eula_version{ | ||||||
| @ -715,7 +715,7 @@ Result ISystemSettingsServer::GetSettingsItemValueSize( | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Result ISystemSettingsServer::GetSettingsItemValue( | Result ISystemSettingsServer::GetSettingsItemValue( | ||||||
|     OutBuffer<BufferAttr_HipcMapAlias> out_data, |     Out<u64> out_size, OutBuffer<BufferAttr_HipcMapAlias> out_data, | ||||||
|     InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_category_buffer, |     InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_category_buffer, | ||||||
|     InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_name_buffer) { |     InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_name_buffer) { | ||||||
|     const std::string setting_category{Common::StringFromBuffer(*setting_category_buffer)}; |     const std::string setting_category{Common::StringFromBuffer(*setting_category_buffer)}; | ||||||
| @ -723,7 +723,7 @@ Result ISystemSettingsServer::GetSettingsItemValue( | |||||||
| 
 | 
 | ||||||
|     LOG_INFO(Service_SET, "called, category={}, name={}", setting_category, setting_name); |     LOG_INFO(Service_SET, "called, category={}, name={}", setting_category, setting_name); | ||||||
| 
 | 
 | ||||||
|     R_RETURN(GetSettingsItemValueImpl(out_data, setting_category, setting_name)); |     R_RETURN(GetSettingsItemValueImpl(out_data, *out_size, setting_category, setting_name)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Result ISystemSettingsServer::GetTvSettings(Out<TvSettings> out_tv_settings) { | Result ISystemSettingsServer::GetTvSettings(Out<TvSettings> out_tv_settings) { | ||||||
| @ -1363,13 +1363,16 @@ void ISystemSettingsServer::SetSaveNeeded() { | |||||||
|     m_save_needed = true; |     m_save_needed = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Result ISystemSettingsServer::GetSettingsItemValueImpl(std::vector<u8>& out_value, | Result ISystemSettingsServer::GetSettingsItemValueImpl(std::span<u8> out_value, u64& out_size, | ||||||
|                                                        const std::string& category, |                                                        const std::string& category, | ||||||
|                                                        const std::string& name) { |                                                        const std::string& name) { | ||||||
|     auto settings{GetSettings()}; |     auto settings{GetSettings()}; | ||||||
|     R_UNLESS(settings.contains(category) && settings[category].contains(name), ResultUnknown); |     R_UNLESS(settings.contains(category) && settings[category].contains(name), ResultUnknown); | ||||||
| 
 | 
 | ||||||
|     out_value = settings[category][name]; |     ASSERT_MSG(out_value.size() >= settings[category][name].size(), | ||||||
|  |                "Stored type is bigger than requested type"); | ||||||
|  |     out_size = std::min<u64>(settings[category][name].size(), out_value.size()); | ||||||
|  |     std::memcpy(out_value.data(), settings[category][name].data(), out_size); | ||||||
|     R_SUCCEED(); |     R_SUCCEED(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -34,20 +34,17 @@ public: | |||||||
|     explicit ISystemSettingsServer(Core::System& system_); |     explicit ISystemSettingsServer(Core::System& system_); | ||||||
|     ~ISystemSettingsServer() override; |     ~ISystemSettingsServer() override; | ||||||
| 
 | 
 | ||||||
|     Result GetSettingsItemValueImpl(std::vector<u8>& out_value, const std::string& category, |     Result GetSettingsItemValueImpl(std::span<u8> out_value, u64& out_size, | ||||||
|                                     const std::string& name); |                                     const std::string& category, const std::string& name); | ||||||
| 
 | 
 | ||||||
|     template <typename T> |     template <typename T> | ||||||
|     Result GetSettingsItemValueImpl(T& value, const std::string& category, |     Result GetSettingsItemValueImpl(T& out_value, const std::string& category, | ||||||
|                                     const std::string& name) { |                                     const std::string& name) { | ||||||
|         std::vector<u8> data; |         u64 data_size{}; | ||||||
|         const auto result = GetSettingsItemValueImpl(data, category, name); |         std::vector<u8> data(sizeof(T)); | ||||||
|         if (result.IsError()) { |         R_TRY(GetSettingsItemValueImpl(data, data_size, category, name)); | ||||||
|             return result; |         std::memcpy(&out_value, data.data(), data_size); | ||||||
|         } |         R_SUCCEED(); | ||||||
|         ASSERT(data.size() >= sizeof(T)); |  | ||||||
|         std::memcpy(&value, data.data(), sizeof(T)); |  | ||||||
|         return result; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
| @ -84,7 +81,7 @@ public: | |||||||
|         InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_category_buffer, |         InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_category_buffer, | ||||||
|         InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_name_buf); |         InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_name_buf); | ||||||
|     Result GetSettingsItemValue( |     Result GetSettingsItemValue( | ||||||
|         OutBuffer<BufferAttr_HipcMapAlias> out_data, |         Out<u64> out_size, OutBuffer<BufferAttr_HipcMapAlias> out_data, | ||||||
|         InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_category_buffer, |         InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_category_buffer, | ||||||
|         InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_name_buffer); |         InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_name_buffer); | ||||||
|     Result GetTvSettings(Out<TvSettings> out_tv_settings); |     Result GetTvSettings(Out<TvSettings> out_tv_settings); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user