Replace CLang file hashing with .st_mtime
Replace CLang file hashing with .st_mtime for performance. Also, fix a problem in CLangMngr::MergeDefinitionFile.
This commit is contained in:
parent
2b9e9c79b9
commit
530d0bf570
|
@ -318,48 +318,22 @@ void reparse_color(String* def)
|
||||||
// -- BAILOPAN
|
// -- BAILOPAN
|
||||||
int CLangMngr::MergeDefinitionFile(const char *file)
|
int CLangMngr::MergeDefinitionFile(const char *file)
|
||||||
{
|
{
|
||||||
const char* md5buffer = hashFile(file, Hash_Md5);
|
/** Tries to open the file. */
|
||||||
if (!md5buffer)
|
struct stat fileStat;
|
||||||
|
if (stat(file, &fileStat))
|
||||||
{
|
{
|
||||||
CVector<md5Pair *>::iterator iter;
|
FileList.remove(file);
|
||||||
for (iter = FileList.begin(); iter != FileList.end(); ++iter)
|
|
||||||
{
|
|
||||||
if ((*iter)->file.compare(file) == 0)
|
|
||||||
{
|
|
||||||
char buf[33] = {0};
|
|
||||||
(*iter)->val.assign(buf);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
AMXXLOG_Log("[AMXX] Failed to open dictionary file: %s", file);
|
AMXXLOG_Log("[AMXX] Failed to open dictionary file: %s", file);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool foundFlag = false;
|
/** Checks if there is an existing entry with same time stamp. */
|
||||||
|
time_t timeStamp;
|
||||||
|
if (FileList.retrieve(file, &timeStamp) && fileStat.st_mtime == timeStamp)
|
||||||
|
return -1;
|
||||||
|
|
||||||
CVector<md5Pair *>::iterator iter;
|
/** If yes, it either means that the entry doesn't exist or the existing entry needs to be updated. */
|
||||||
for (iter = FileList.begin(); iter != FileList.end(); ++iter)
|
FileList.replace(file, fileStat.st_mtime);
|
||||||
{
|
|
||||||
if ((*iter)->file.compare(file) == 0)
|
|
||||||
{
|
|
||||||
if ((*iter)->val.compare(md5buffer) == 0)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
(*iter)->val.assign(md5buffer);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
foundFlag = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!foundFlag)
|
|
||||||
{
|
|
||||||
md5Pair *p = new md5Pair;
|
|
||||||
p->file.assign(file);
|
|
||||||
p->val.assign(md5buffer);
|
|
||||||
FileList.push_back(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
FILE* fp = fopen(file, "rt");
|
FILE* fp = fopen(file, "rt");
|
||||||
if (!fp)
|
if (!fp)
|
||||||
|
@ -532,12 +506,6 @@ const char *CLangMngr::GetDef(const char *langName, const char *key, int &status
|
||||||
|
|
||||||
void CLangMngr::InvalidateCache()
|
void CLangMngr::InvalidateCache()
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < FileList.size(); i++)
|
|
||||||
{
|
|
||||||
if (FileList[i])
|
|
||||||
delete FileList[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
FileList.clear();
|
FileList.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -558,12 +526,6 @@ void CLangMngr::Clear()
|
||||||
delete m_Languages[i];
|
delete m_Languages[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < FileList.size(); i++)
|
|
||||||
{
|
|
||||||
if (FileList[i])
|
|
||||||
delete FileList[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < KeyList.size(); i++)
|
for (i = 0; i < KeyList.size(); i++)
|
||||||
{
|
{
|
||||||
if (KeyList[i])
|
if (KeyList[i])
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#define _INCLUDE_CLANG_H
|
#define _INCLUDE_CLANG_H
|
||||||
|
|
||||||
#include "sh_tinyhash.h"
|
#include "sh_tinyhash.h"
|
||||||
|
#include "sm_stringhashmap.h"
|
||||||
|
|
||||||
#define LANG_SERVER 0
|
#define LANG_SERVER 0
|
||||||
#define LANG_PLAYER -1
|
#define LANG_PLAYER -1
|
||||||
|
@ -18,12 +19,6 @@
|
||||||
#define ERR_BADKEY 1 // Lang key not found
|
#define ERR_BADKEY 1 // Lang key not found
|
||||||
#define ERR_BADLANG 2 // Invalid lang
|
#define ERR_BADLANG 2 // Invalid lang
|
||||||
|
|
||||||
struct md5Pair
|
|
||||||
{
|
|
||||||
String file;
|
|
||||||
String val;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sKeyDef
|
struct sKeyDef
|
||||||
{
|
{
|
||||||
String *definition;
|
String *definition;
|
||||||
|
@ -118,7 +113,7 @@ private:
|
||||||
|
|
||||||
LangVec m_Languages;
|
LangVec m_Languages;
|
||||||
|
|
||||||
CVector<md5Pair *> FileList;
|
StringHashMap<time_t> FileList;
|
||||||
CVector<String *> KeyList;
|
CVector<String *> KeyList;
|
||||||
THash<String, keytbl_val> KeyTable;
|
THash<String, keytbl_val> KeyTable;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user