bool CAddonDll::get_setting_string(void* kodiBase, const char* id, char** value) { CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); if (addon == nullptr || id == nullptr || value == nullptr) { CLog::Log(LOGERROR, "kodi::General::%s - invalid data (addon='%p', id='%p', value='%p')", __FUNCTION__, kodiBase, static_cast<const void*>(id), static_cast<void*>(value)); return false; } if (!addon->ReloadSettings()) { CLog::Log(LOGERROR, "kodi::General::%s - could't get settings for add-on '%s'", __FUNCTION__, addon->Name().c_str()); return false; } auto setting = addon->GetSettings()->GetSetting(id); if (setting == nullptr) { CLog::Log(LOGERROR, "kodi::General::%s - can't find setting '%s' in '%s'", __FUNCTION__, id, addon->Name().c_str()); return false; } if (setting->GetType() != SettingType::String) { CLog::Log(LOGERROR, "kodi::General::%s - setting '%s' is not a string in '%s'", __FUNCTION__, id, addon->Name().c_str()); return false; } *value = strdup(std::static_pointer_cast<CSettingString>(setting)->GetValue().c_str()); return true; }