safer wxGetTranslation wrapper

This commit is contained in:
s_nakamoto 2010-02-17 23:55:43 +00:00
parent bcd2714038
commit 794298063d
3 changed files with 34 additions and 6 deletions

View File

@ -19,7 +19,7 @@ class CScript;
class CDataStream;
class CAutoFile;
static const int VERSION = 202;
static const int VERSION = 203;
static const char* pszSubVer = ".0";

View File

@ -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
View File

@ -136,6 +136,7 @@ bool ParseMoney(const char* pszIn, int64& nRet);
vector<unsigned char> ParseHex(const char* psz);
vector<unsigned char> ParseHex(const std::string& str);
void ParseParameters(int argc, char* argv[]);
const char* wxGetTranslation(const char* psz);
int GetFilesize(FILE* file);
void GetDataDir(char* pszDirRet);
string GetDataDir();
@ -340,11 +341,9 @@ void skipspaces(T& it)
++it;
}
inline const char* wxGetTranslation(const char* psz)
{
// Return translated UTF-8 const char*
return wxGetTranslation(wxString(psz, wxConvUTF8)).utf8_str();
}