From c6ab3cf6d9cf5f5ade3b8fc48590e1bc4794cb43 Mon Sep 17 00:00:00 2001 From: s_nakamoto Date: Wed, 17 Feb 2010 23:55:43 +0000 Subject: [PATCH] safer wxGetTranslation wrapper git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@67 1a98c847-1fd6-4fd8-948a-caf3550aa51b --- serialize.h | 2 +- util.cpp | 29 +++++++++++++++++++++++++++++ util.h | 9 ++++----- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/serialize.h b/serialize.h index f3b99978d..aaf3f9905 100644 --- a/serialize.h +++ b/serialize.h @@ -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"; diff --git a/util.cpp b/util.cpp index 266c1dd7d..f4ce55664 100644 --- a/util.cpp +++ b/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 mapCache; + map::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; + } +} + + + + + diff --git a/util.h b/util.h index 188a9ece1..8aed902f3 100644 --- a/util.h +++ b/util.h @@ -136,6 +136,7 @@ bool ParseMoney(const char* pszIn, int64& nRet); vector ParseHex(const char* psz); vector 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(); -} + + +