diff options
Diffstat (limited to 'src/script')
-rw-r--r-- | src/script/script_info.cpp | 7 | ||||
-rw-r--r-- | src/script/script_info.hpp | 10 | ||||
-rw-r--r-- | src/script/script_scanner.cpp | 48 | ||||
-rw-r--r-- | src/script/script_scanner.hpp | 12 |
4 files changed, 26 insertions, 51 deletions
diff --git a/src/script/script_info.cpp b/src/script/script_info.cpp index 4eebd548d..d02bbe324 100644 --- a/src/script/script_info.cpp +++ b/src/script/script_info.cpp @@ -39,8 +39,6 @@ ScriptInfo::~ScriptInfo() free(this->date); free(this->instance_name); free(this->url); - free(this->main_script); - free(this->tar_file); free(this->SQ_instance); } @@ -81,9 +79,8 @@ bool ScriptInfo::CheckMethod(const char *name) const } /* Get location information of the scanner */ - info->main_script = stredup(info->scanner->GetMainScript()); - const char *tar_name = info->scanner->GetTarFile(); - if (tar_name != nullptr) info->tar_file = stredup(tar_name); + info->main_script = info->scanner->GetMainScript(); + info->tar_file = info->scanner->GetTarFile(); /* Cache the data the info file gives us. */ if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetAuthor", &info->author, MAX_GET_OPS)) return SQ_ERROR; diff --git a/src/script/script_info.hpp b/src/script/script_info.hpp index 5f90e9b23..c2e952b82 100644 --- a/src/script/script_info.hpp +++ b/src/script/script_info.hpp @@ -32,8 +32,6 @@ public: ScriptInfo() : engine(nullptr), SQ_instance(nullptr), - main_script(nullptr), - tar_file(nullptr), author(nullptr), name(nullptr), short_name(nullptr), @@ -89,12 +87,12 @@ public: /** * Get the filename of the main.nut script. */ - const char *GetMainScript() const { return this->main_script; } + const char *GetMainScript() const { return this->main_script.c_str(); } /** * Get the filename of the tar the script is in. */ - const char *GetTarFile() const { return this->tar_file; } + std::string GetTarFile() const { return this->tar_file; } /** * Check if a given method exists. @@ -152,8 +150,8 @@ protected: ScriptConfigItemList config_list; ///< List of settings from this Script. private: - char *main_script; ///< The full path of the script. - char *tar_file; ///< If, which tar file the script was in. + std::string main_script; ///< The full path of the script. + std::string tar_file; ///< If, which tar file the script was in. const char *author; ///< Author of the script. const char *name; ///< Full name of the script. const char *short_name; ///< Short name (4 chars) which uniquely identifies the script. diff --git a/src/script/script_scanner.cpp b/src/script/script_scanner.cpp index dc3feb58c..6fa88bfee 100644 --- a/src/script/script_scanner.cpp +++ b/src/script/script_scanner.cpp @@ -23,47 +23,29 @@ #include "../safeguards.h" -bool ScriptScanner::AddFile(const char *filename, size_t basepath_length, const char *tar_filename) +bool ScriptScanner::AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) { - free(this->main_script); - this->main_script = stredup(filename); - if (this->main_script == nullptr) return false; - - free(this->tar_file); - if (tar_filename != nullptr) { - this->tar_file = stredup(tar_filename); - if (this->tar_file == nullptr) return false; - } else { - this->tar_file = nullptr; - } - - const char *end = this->main_script + strlen(this->main_script) + 1; - char *p = strrchr(this->main_script, PATHSEPCHAR); - if (p == nullptr) { - p = this->main_script; - } else { - /* Skip over the path separator character. We don't need that. */ - p++; - } + this->main_script = filename; + this->tar_file = tar_filename; - strecpy(p, "main.nut", end); + auto p = this->main_script.rfind(PATHSEPCHAR); + this->main_script.erase(p != std::string::npos ? p + 1 : 0); + this->main_script += "main.nut"; if (!FioCheckFileExists(filename, this->subdir) || !FioCheckFileExists(this->main_script, this->subdir)) return false; this->ResetEngine(); try { - this->engine->LoadScript(filename); + this->engine->LoadScript(filename.c_str()); } catch (Script_FatalError &e) { - DEBUG(script, 0, "Fatal error '%s' when trying to load the script '%s'.", e.GetErrorMessage(), filename); + DEBUG(script, 0, "Fatal error '%s' when trying to load the script '%s'.", e.GetErrorMessage(), filename.c_str()); return false; } return true; } ScriptScanner::ScriptScanner() : - engine(nullptr), - main_script(nullptr), - tar_file(nullptr) + engine(nullptr) { } @@ -87,8 +69,6 @@ ScriptScanner::~ScriptScanner() { this->Reset(); - free(this->main_script); - free(this->tar_file); delete this->engine; } @@ -194,7 +174,7 @@ struct ScriptFileChecksumCreator : FileScanner { } /* Add the file and calculate the md5 sum. */ - virtual bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) + virtual bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) { Md5 checksum; uint8 buffer[1024]; @@ -202,7 +182,7 @@ struct ScriptFileChecksumCreator : FileScanner { byte tmp_md5sum[16]; /* Open the file ... */ - FILE *f = FioFOpenFile(filename, "rb", this->dir, &size); + FILE *f = FioFOpenFile(filename.c_str(), "rb", this->dir, &size); if (f == nullptr) return false; /* ... calculate md5sum... */ @@ -239,9 +219,9 @@ static bool IsSameScript(const ContentInfo *ci, bool md5sum, ScriptInfo *info, S if (!md5sum) return true; ScriptFileChecksumCreator checksum(dir); - const char *tar_filename = info->GetTarFile(); + auto tar_filename = info->GetTarFile(); TarList::iterator iter; - if (tar_filename != nullptr && (iter = _tar_list[dir].find(tar_filename)) != _tar_list[dir].end()) { + if (!tar_filename.empty() && (iter = _tar_list[dir].find(tar_filename)) != _tar_list[dir].end()) { /* The main script is in a tar file, so find all files that * are in the same tar and add them to the MD5 checksumming. */ TarFileList::iterator tar; @@ -253,7 +233,7 @@ static bool IsSameScript(const ContentInfo *ci, bool md5sum, ScriptInfo *info, S const char *ext = strrchr(tar->first.c_str(), '.'); if (ext == nullptr || strcasecmp(ext, ".nut") != 0) continue; - checksum.AddFile(tar->first.c_str(), 0, tar_filename); + checksum.AddFile(tar->first, 0, tar_filename); } } else { char path[MAX_PATH]; diff --git a/src/script/script_scanner.hpp b/src/script/script_scanner.hpp index eb65a197e..ca9068ca1 100644 --- a/src/script/script_scanner.hpp +++ b/src/script/script_scanner.hpp @@ -32,12 +32,12 @@ public: /** * Get the current main script the ScanDir is currently tracking. */ - const char *GetMainScript() { return this->main_script; } + std::string GetMainScript() { return this->main_script; } /** * Get the current tar file the ScanDir is currently tracking. */ - const char *GetTarFile() { return this->tar_file; } + std::string GetTarFile() { return this->tar_file; } /** * Get the list of all registered scripts. @@ -75,7 +75,7 @@ public: */ const char *FindMainScript(const ContentInfo *ci, bool md5sum); - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override; + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override; /** * Rescan the script dir. @@ -83,9 +83,9 @@ public: void RescanDir(); protected: - class Squirrel *engine; ///< The engine we're scanning with. - char *main_script; ///< The full path of the script. - char *tar_file; ///< If, which tar file the script was in. + class Squirrel *engine; ///< The engine we're scanning with. + std::string main_script; ///< The full path of the script. + std::string tar_file; ///< If, which tar file the script was in. ScriptInfoList info_list; ///< The list of all script. ScriptInfoList info_single_list; ///< The list of all unique script. The best script (highest version) is shown. |