safer wxGetTranslation wrapper
This commit is contained in:
parent
bcd2714038
commit
794298063d
3 changed files with 34 additions and 6 deletions
|
@ -19,7 +19,7 @@ class CScript;
|
||||||
class CDataStream;
|
class CDataStream;
|
||||||
class CAutoFile;
|
class CAutoFile;
|
||||||
|
|
||||||
static const int VERSION = 202;
|
static const int VERSION = 203;
|
||||||
static const char* pszSubVer = ".0";
|
static const char* pszSubVer = ".0";
|
||||||
|
|
||||||
|
|
||||||
|
|
29
util.cpp
29
util.cpp
|
@ -431,6 +431,35 @@ void ParseParameters(int argc, char* argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char* wxGetTranslation(const char* pszEnglish)
|
||||||
|
{
|
||||||
|
// Wrapper of wxGetTranslation returning the same const char* type as was passed in
|
||||||
|
static CCriticalSection cs;
|
||||||
|
CRITICAL_BLOCK(cs)
|
||||||
|
{
|
||||||
|
// Look in cache
|
||||||
|
static map<string, char*> mapCache;
|
||||||
|
map<string, char*>::iterator mi = mapCache.find(pszEnglish);
|
||||||
|
if (mi != mapCache.end())
|
||||||
|
return (*mi).second;
|
||||||
|
|
||||||
|
// wxWidgets translation
|
||||||
|
const char* pszTranslated = wxGetTranslation(wxString(pszEnglish, wxConvUTF8)).utf8_str();
|
||||||
|
if (strcmp(pszEnglish, pszTranslated) == 0)
|
||||||
|
return pszEnglish;
|
||||||
|
|
||||||
|
// Add to cache, memory doesn't need to be freed
|
||||||
|
char* pszCached = new char[strlen(pszTranslated)+1];
|
||||||
|
strcpy(pszCached, pszTranslated);
|
||||||
|
mapCache[pszEnglish] = pszCached;
|
||||||
|
return pszCached;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
9
util.h
9
util.h
|
@ -136,6 +136,7 @@ bool ParseMoney(const char* pszIn, int64& nRet);
|
||||||
vector<unsigned char> ParseHex(const char* psz);
|
vector<unsigned char> ParseHex(const char* psz);
|
||||||
vector<unsigned char> ParseHex(const std::string& str);
|
vector<unsigned char> ParseHex(const std::string& str);
|
||||||
void ParseParameters(int argc, char* argv[]);
|
void ParseParameters(int argc, char* argv[]);
|
||||||
|
const char* wxGetTranslation(const char* psz);
|
||||||
int GetFilesize(FILE* file);
|
int GetFilesize(FILE* file);
|
||||||
void GetDataDir(char* pszDirRet);
|
void GetDataDir(char* pszDirRet);
|
||||||
string GetDataDir();
|
string GetDataDir();
|
||||||
|
@ -340,11 +341,9 @@ void skipspaces(T& it)
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const char* wxGetTranslation(const char* psz)
|
|
||||||
{
|
|
||||||
// Return translated UTF-8 const char*
|
|
||||||
return wxGetTranslation(wxString(psz, wxConvUTF8)).utf8_str();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue