summaryrefslogtreecommitdiff
path: root/src/script
diff options
context:
space:
mode:
authorMichael Lutz <michi@icosahedron.de>2020-12-06 21:11:50 +0100
committerMichael Lutz <michi@icosahedron.de>2020-12-27 13:19:25 +0100
commitb408fe77f792650ef569f9852165759f960fd52f (patch)
tree6d1f0a134da31bd1d53dee052721d78955d688e6 /src/script
parent358056ec428d1938b8c9219a60c6fb400115f152 (diff)
downloadopenttd-b408fe77f792650ef569f9852165759f960fd52f.tar.xz
Codechange: Use std::string in file scanners.
Diffstat (limited to 'src/script')
-rw-r--r--src/script/script_info.cpp7
-rw-r--r--src/script/script_info.hpp10
-rw-r--r--src/script/script_scanner.cpp48
-rw-r--r--src/script/script_scanner.hpp12
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.