From 0fd9eb0faaf279ed7eea28d2d45b38af8fd6040f Mon Sep 17 00:00:00 2001 From: Rubidium Date: Fri, 5 May 2023 09:53:34 +0200 Subject: [PATCH] Codechange: use std::string for script info/library finding --- src/ai/ai.hpp | 4 ++-- src/ai/ai_config.cpp | 2 +- src/ai/ai_config.hpp | 2 +- src/ai/ai_core.cpp | 4 ++-- src/ai/ai_instance.cpp | 2 +- src/ai/ai_instance.hpp | 2 +- src/ai/ai_scanner.cpp | 6 +++--- src/ai/ai_scanner.hpp | 4 ++-- src/game/game.hpp | 4 ++-- src/game/game_config.cpp | 2 +- src/game/game_config.hpp | 2 +- src/game/game_core.cpp | 4 ++-- src/game/game_instance.cpp | 2 +- src/game/game_instance.hpp | 2 +- src/game/game_scanner.cpp | 6 +++--- src/game/game_scanner.hpp | 4 ++-- src/script/script_config.cpp | 8 +++----- src/script/script_config.hpp | 7 +++---- src/script/script_instance.hpp | 2 +- src/settings.cpp | 4 ++-- 20 files changed, 35 insertions(+), 38 deletions(-) diff --git a/src/ai/ai.hpp b/src/ai/ai.hpp index fce9c2059c..ae19439754 100644 --- a/src/ai/ai.hpp +++ b/src/ai/ai.hpp @@ -120,9 +120,9 @@ public: /** Wrapper function for AIScanner::GetUniqueAIInfoList */ static const ScriptInfoList *GetUniqueInfoList(); /** Wrapper function for AIScanner::FindInfo */ - static class AIInfo *FindInfo(const char *name, int version, bool force_exact_match); + static class AIInfo *FindInfo(const std::string &name, int version, bool force_exact_match); /** Wrapper function for AIScanner::FindLibrary */ - static class AILibrary *FindLibrary(const char *library, int version); + static class AILibrary *FindLibrary(const std::string &library, int version); /** * Rescans all searchpaths for available AIs. If a used AI is no longer diff --git a/src/ai/ai_config.cpp b/src/ai/ai_config.cpp index a1c6479952..7493556736 100644 --- a/src/ai/ai_config.cpp +++ b/src/ai/ai_config.cpp @@ -33,7 +33,7 @@ class AIInfo *AIConfig::GetInfo() const return static_cast(ScriptConfig::GetInfo()); } -ScriptInfo *AIConfig::FindInfo(const char *name, int version, bool force_exact_match) +ScriptInfo *AIConfig::FindInfo(const std::string &name, int version, bool force_exact_match) { return static_cast(AI::FindInfo(name, version, force_exact_match)); } diff --git a/src/ai/ai_config.hpp b/src/ai/ai_config.hpp index a0f98d2187..b64020b4f0 100644 --- a/src/ai/ai_config.hpp +++ b/src/ai/ai_config.hpp @@ -41,7 +41,7 @@ public: bool ResetInfo(bool force_exact_match); protected: - ScriptInfo *FindInfo(const char *name, int version, bool force_exact_match) override; + ScriptInfo *FindInfo(const std::string &name, int version, bool force_exact_match) override; }; #endif /* AI_CONFIG_HPP */ diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index feeeeb0162..eb45cd1e56 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -309,12 +309,12 @@ return AI::scanner_info->GetUniqueInfoList(); } -/* static */ AIInfo *AI::FindInfo(const char *name, int version, bool force_exact_match) +/* static */ AIInfo *AI::FindInfo(const std::string &name, int version, bool force_exact_match) { return AI::scanner_info->FindInfo(name, version, force_exact_match); } -/* static */ AILibrary *AI::FindLibrary(const char *library, int version) +/* static */ AILibrary *AI::FindLibrary(const std::string &library, int version) { return AI::scanner_library->FindLibrary(library, version); } diff --git a/src/ai/ai_instance.cpp b/src/ai/ai_instance.cpp index 411afe3aa0..5f8ac9d164 100644 --- a/src/ai/ai_instance.cpp +++ b/src/ai/ai_instance.cpp @@ -88,7 +88,7 @@ int AIInstance::GetSetting(const char *name) return AIConfig::GetConfig(_current_company)->GetSetting(name); } -ScriptInfo *AIInstance::FindLibrary(const char *library, int version) +ScriptInfo *AIInstance::FindLibrary(const std::string &library, int version) { return (ScriptInfo *)AI::FindLibrary(library, version); } diff --git a/src/ai/ai_instance.hpp b/src/ai/ai_instance.hpp index 2cdabd9913..12b5159425 100644 --- a/src/ai/ai_instance.hpp +++ b/src/ai/ai_instance.hpp @@ -24,7 +24,7 @@ public: void Initialize(class AIInfo *info); int GetSetting(const char *name) override; - ScriptInfo *FindLibrary(const char *library, int version) override; + ScriptInfo *FindLibrary(const std::string &library, int version) override; private: void RegisterAPI() override; diff --git a/src/ai/ai_scanner.cpp b/src/ai/ai_scanner.cpp index 150aafd34d..e37f2ed6c4 100644 --- a/src/ai/ai_scanner.cpp +++ b/src/ai/ai_scanner.cpp @@ -92,10 +92,10 @@ AIInfo *AIScannerInfo::SelectRandomAI() const #undef GetAIInfo } -AIInfo *AIScannerInfo::FindInfo(const char *name, int version, bool force_exact_match) +AIInfo *AIScannerInfo::FindInfo(const std::string &name, int version, bool force_exact_match) { if (this->info_list.size() == 0) return nullptr; - if (name == nullptr) return nullptr; + if (name.empty()) return nullptr; if (version == -1) { /* We want to load the latest version of this AI; so find it */ @@ -145,7 +145,7 @@ void AIScannerLibrary::RegisterAPI(class Squirrel *engine) AILibrary::RegisterAPI(engine); } -AILibrary *AIScannerLibrary::FindLibrary(const char *library, int version) +AILibrary *AIScannerLibrary::FindLibrary(const std::string &library, int version) { /* Internally we store libraries as 'library.version' */ std::string library_name = fmt::format("{}.{}", library, version); diff --git a/src/ai/ai_scanner.hpp b/src/ai/ai_scanner.hpp index 4a6a065142..a2c8a7280e 100644 --- a/src/ai/ai_scanner.hpp +++ b/src/ai/ai_scanner.hpp @@ -32,7 +32,7 @@ public: * @param force_exact_match Only match name+version, never latest. * @return nullptr if no match found, otherwise the AI that matched. */ - class AIInfo *FindInfo(const char *name, int version, bool force_exact_match); + class AIInfo *FindInfo(const std::string &name, int version, bool force_exact_match); /** * Set the Dummy AI. @@ -60,7 +60,7 @@ public: * @param version The version the library should have. * @return The library if found, nullptr otherwise. */ - class AILibrary *FindLibrary(const char *library, int version); + class AILibrary *FindLibrary(const std::string &library, int version); protected: std::string GetScriptName(ScriptInfo *info) override; diff --git a/src/game/game.hpp b/src/game/game.hpp index 9e92130f10..3c8fcdad92 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -91,9 +91,9 @@ public: /** Wrapper function for GameScanner::GetUniqueInfoList */ static const ScriptInfoList *GetUniqueInfoList(); /** Wrapper function for GameScannerInfo::FindInfo */ - static class GameInfo *FindInfo(const char *name, int version, bool force_exact_match); + static class GameInfo *FindInfo(const std::string &name, int version, bool force_exact_match); /** Wrapper function for GameScanner::FindLibrary */ - static class GameLibrary *FindLibrary(const char *library, int version); + static class GameLibrary *FindLibrary(const std::string &library, int version); /** * Get the current active instance. diff --git a/src/game/game_config.cpp b/src/game/game_config.cpp index 89283129e7..28b6d281b0 100644 --- a/src/game/game_config.cpp +++ b/src/game/game_config.cpp @@ -32,7 +32,7 @@ class GameInfo *GameConfig::GetInfo() const return static_cast(ScriptConfig::GetInfo()); } -ScriptInfo *GameConfig::FindInfo(const char *name, int version, bool force_exact_match) +ScriptInfo *GameConfig::FindInfo(const std::string &name, int version, bool force_exact_match) { return static_cast(Game::FindInfo(name, version, force_exact_match)); } diff --git a/src/game/game_config.hpp b/src/game/game_config.hpp index a01128e671..41385035d2 100644 --- a/src/game/game_config.hpp +++ b/src/game/game_config.hpp @@ -40,7 +40,7 @@ public: bool ResetInfo(bool force_exact_match); protected: - ScriptInfo *FindInfo(const char *name, int version, bool force_exact_match) override; + ScriptInfo *FindInfo(const std::string &name, int version, bool force_exact_match) override; }; #endif /* GAME_CONFIG_HPP */ diff --git a/src/game/game_core.cpp b/src/game/game_core.cpp index a4e1e64ddc..eff3055f96 100644 --- a/src/game/game_core.cpp +++ b/src/game/game_core.cpp @@ -239,12 +239,12 @@ return Game::scanner_info->GetUniqueInfoList(); } -/* static */ GameInfo *Game::FindInfo(const char *name, int version, bool force_exact_match) +/* static */ GameInfo *Game::FindInfo(const std::string &name, int version, bool force_exact_match) { return Game::scanner_info->FindInfo(name, version, force_exact_match); } -/* static */ GameLibrary *Game::FindLibrary(const char *library, int version) +/* static */ GameLibrary *Game::FindLibrary(const std::string &library, int version) { return Game::scanner_library->FindLibrary(library, version); } diff --git a/src/game/game_instance.cpp b/src/game/game_instance.cpp index 8fcc6252de..36c3b984c8 100644 --- a/src/game/game_instance.cpp +++ b/src/game/game_instance.cpp @@ -58,7 +58,7 @@ int GameInstance::GetSetting(const char *name) return GameConfig::GetConfig()->GetSetting(name); } -ScriptInfo *GameInstance::FindLibrary(const char *library, int version) +ScriptInfo *GameInstance::FindLibrary(const std::string &library, int version) { return (ScriptInfo *)Game::FindLibrary(library, version); } diff --git a/src/game/game_instance.hpp b/src/game/game_instance.hpp index 84cb20ac5a..4b5e1b0452 100644 --- a/src/game/game_instance.hpp +++ b/src/game/game_instance.hpp @@ -24,7 +24,7 @@ public: void Initialize(class GameInfo *info); int GetSetting(const char *name) override; - ScriptInfo *FindLibrary(const char *library, int version) override; + ScriptInfo *FindLibrary(const std::string &library, int version) override; private: void RegisterAPI() override; diff --git a/src/game/game_scanner.cpp b/src/game/game_scanner.cpp index 85b2a77ea5..465392e698 100644 --- a/src/game/game_scanner.cpp +++ b/src/game/game_scanner.cpp @@ -33,10 +33,10 @@ void GameScannerInfo::RegisterAPI(class Squirrel *engine) GameInfo::RegisterAPI(engine); } -GameInfo *GameScannerInfo::FindInfo(const char *name, int version, bool force_exact_match) +GameInfo *GameScannerInfo::FindInfo(const std::string &name, int version, bool force_exact_match) { if (this->info_list.size() == 0) return nullptr; - if (name == nullptr) return nullptr; + if (name.empty()) return nullptr; if (version == -1) { /* We want to load the latest version of this Game script; so find it */ @@ -86,7 +86,7 @@ void GameScannerLibrary::RegisterAPI(class Squirrel *engine) GameLibrary::RegisterAPI(engine); } -GameLibrary *GameScannerLibrary::FindLibrary(const char *library, int version) +GameLibrary *GameScannerLibrary::FindLibrary(const std::string &library, int version) { /* Internally we store libraries as 'library.version' */ std::string library_name = fmt::format("{}.{}", library, version); diff --git a/src/game/game_scanner.hpp b/src/game/game_scanner.hpp index c0628fc6a7..027649b1ad 100644 --- a/src/game/game_scanner.hpp +++ b/src/game/game_scanner.hpp @@ -23,7 +23,7 @@ public: * @param force_exact_match Only match name+version, never latest. * @return nullptr if no match found, otherwise the game script that matched. */ - class GameInfo *FindInfo(const char *name, int version, bool force_exact_match); + class GameInfo *FindInfo(const std::string &name, int version, bool force_exact_match); protected: std::string GetScriptName(ScriptInfo *info) override; @@ -44,7 +44,7 @@ public: * @param version The version the library should have. * @return The library if found, nullptr otherwise. */ - class GameLibrary *FindLibrary(const char *library, int version); + class GameLibrary *FindLibrary(const std::string &library, int version); protected: std::string GetScriptName(ScriptInfo *info) override; diff --git a/src/script/script_config.cpp b/src/script/script_config.cpp index 0addbdd35f..6e9514e140 100644 --- a/src/script/script_config.cpp +++ b/src/script/script_config.cpp @@ -19,8 +19,7 @@ void ScriptConfig::Change(const char *name, int version, bool force_exact_match, bool is_random) { - free(this->name); - this->name = (name == nullptr) ? nullptr : stredup(name); + this->name = (name == nullptr) ? "" : name; this->info = (name == nullptr) ? nullptr : this->FindInfo(this->name, version, force_exact_match); this->version = (info == nullptr) ? -1 : info->GetVersion(); this->is_random = is_random; @@ -44,7 +43,7 @@ void ScriptConfig::Change(const char *name, int version, bool force_exact_match, ScriptConfig::ScriptConfig(const ScriptConfig *config) { - this->name = (config->name == nullptr) ? nullptr : stredup(config->name); + this->name = config->name; this->info = config->info; this->version = config->version; this->is_random = config->is_random; @@ -60,7 +59,6 @@ ScriptConfig::ScriptConfig(const ScriptConfig *config) ScriptConfig::~ScriptConfig() { - free(this->name); this->ResetSettings(); this->to_load_data.reset(); } @@ -156,7 +154,7 @@ bool ScriptConfig::IsRandom() const return this->is_random; } -const char *ScriptConfig::GetName() const +const std::string &ScriptConfig::GetName() const { return this->name; } diff --git a/src/script/script_config.hpp b/src/script/script_config.hpp index 274a8f2058..22d5832fd7 100644 --- a/src/script/script_config.hpp +++ b/src/script/script_config.hpp @@ -60,7 +60,6 @@ protected: public: ScriptConfig() : - name(nullptr), version(-1), info(nullptr), is_random(false), @@ -159,7 +158,7 @@ public: /** * Get the name of the Script. */ - const char *GetName() const; + const std::string &GetName() const; /** * Get the version of the Script. @@ -190,7 +189,7 @@ public: ScriptInstance::ScriptData *GetToLoadData(); protected: - const char *name; ///< Name of the Script + std::string name; ///< Name of the Script int version; ///< Version of the Script class ScriptInfo *info; ///< ScriptInfo object for related to this Script version SettingValueList settings; ///< List with all setting=>value pairs that are configure for this Script @@ -207,7 +206,7 @@ protected: * This function should call back to the Scanner in charge of this Config, * to find the ScriptInfo belonging to a name+version. */ - virtual ScriptInfo *FindInfo(const char *name, int version, bool force_exact_match) = 0; + virtual ScriptInfo *FindInfo(const std::string &name, int version, bool force_exact_match) = 0; }; #endif /* SCRIPT_CONFIG_HPP */ diff --git a/src/script/script_instance.hpp b/src/script/script_instance.hpp index 4e98b8df7e..c9acf4c80a 100644 --- a/src/script/script_instance.hpp +++ b/src/script/script_instance.hpp @@ -70,7 +70,7 @@ public: * @param version The version the library should have. * @return The library if found, nullptr otherwise. */ - virtual class ScriptInfo *FindLibrary(const char *library, int version) = 0; + virtual class ScriptInfo *FindLibrary(const std::string &library, int version) = 0; /** * A script in multiplayer waits for the server to handle its DoCommand. diff --git a/src/settings.cpp b/src/settings.cpp index d650d5594d..098df6761a 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1080,7 +1080,7 @@ static void AISaveConfig(IniFile &ini, const char *grpname) for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) { AIConfig *config = AIConfig::GetConfig(c, AIConfig::SSS_FORCE_NEWGAME); - const char *name; + std::string name; std::string value = config->SettingsToString(); if (config->HasScript()) { @@ -1102,7 +1102,7 @@ static void GameSaveConfig(IniFile &ini, const char *grpname) group->Clear(); GameConfig *config = GameConfig::GetConfig(AIConfig::SSS_FORCE_NEWGAME); - const char *name; + std::string name; std::string value = config->SettingsToString(); if (config->HasScript()) {