12 #include "../stdafx.h"
14 #include "../string_func.h"
15 #include "../settings_type.h"
17 #include "../script/squirrel.hpp"
21 #if defined(ENABLE_NETWORK)
22 #include "../network/network_content.h"
23 #include "../3rdparty/md5/md5.h"
24 #include "../tar_type.h"
27 #include "../safeguards.h"
36 if (tar_filename != NULL) {
38 if (this->
tar_file == NULL)
return false;
62 ScriptScanner::ScriptScanner() :
76 void ScriptScanner::Initialize(
const char *name)
85 ScriptScanner::~ScriptScanner()
105 ScriptInfoList::iterator it = this->
info_list.begin();
106 for (; it != this->
info_list.end(); it++) {
121 char script_original_name[1024];
125 char script_name[1024];
130 DEBUG(script, 0,
"The script '%s' returned a string from GetShortName() which is not four characaters. Unable to load the script.", info->
GetName());
147 DEBUG(script, 1,
"Registering two scripts with the same name and version");
150 DEBUG(script, 1,
"The first is taking precedence.");
173 ScriptInfoList::const_iterator it = list.begin();
174 for (; it != list.end(); it++) {
183 #if defined(ENABLE_NETWORK)
197 memset(this->md5sum, 0,
sizeof(this->md5sum));
201 virtual bool AddFile(
const char *filename,
size_t basepath_length,
const char *tar_filename)
209 FILE *f =
FioFOpenFile(filename,
"rb", this->dir, &size);
210 if (f == NULL)
return false;
213 while ((len = fread(buffer, 1, (size >
sizeof(buffer)) ?
sizeof(buffer) : size, f)) != 0 && size != 0) {
215 checksum.Append(buffer, len);
217 checksum.Finish(tmp_md5sum);
222 for (uint i = 0; i <
sizeof(md5sum); i++) this->md5sum[i] ^= tmp_md5sum[i];
240 for (
int j = 0; j < 4 && *str !=
'\0'; j++, str++)
id |= *str << (8 * j);
243 if (!md5sum)
return true;
246 const char *tar_filename = info->
GetTarFile();
247 TarList::iterator iter;
248 if (tar_filename != NULL && (iter = _tar_list[dir].find(tar_filename)) != _tar_list[dir].end()) {
251 TarFileList::iterator tar;
252 FOR_ALL_TARS(tar, dir) {
254 if (tar->second.tar_filename != iter->first)
continue;
257 const char *ext = strrchr(tar->first.c_str(),
'.');
258 if (ext == NULL || strcasecmp(ext,
".nut") != 0)
continue;
260 checksum.
AddFile(tar->first.c_str(), 0, tar_filename);
268 *strrchr(path, PATHSEPCHAR) =
'\0';
269 checksum.
Scan(
".nut", path);
277 for (ScriptInfoList::iterator it = this->
info_list.begin(); it != this->
info_list.end(); it++) {
278 if (
IsSameScript(ci, md5sum, (*it).second, this->GetDirectory()))
return true;
285 for (ScriptInfoList::iterator it = this->
info_list.begin(); it != this->
info_list.end(); it++) {
286 if (
IsSameScript(ci, md5sum, (*it).second, this->GetDirectory()))
return (*it).second->GetMainScript();