diff options
author | s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b> | 2010-02-17 23:55:43 +0000 |
---|---|---|
committer | s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b> | 2010-02-17 23:55:43 +0000 |
commit | 794298063de40a6837736f9d928d28c2d6712a73 (patch) | |
tree | 58f559dc8b28cf481a6d0128ff64b350603b3f77 | |
parent | bcd27140384ec3703f3fd18ec89b0046a0ef17d3 (diff) |
safer wxGetTranslation wrapper
-rw-r--r-- | serialize.h | 2 | ||||
-rw-r--r-- | util.cpp | 29 | ||||
-rw-r--r-- | util.h | 9 |
3 files changed, 34 insertions, 6 deletions
diff --git a/serialize.h b/serialize.h index f3b99978df..aaf3f99051 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";
@@ -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;
+ }
+}
+
+
+
+
+
@@ -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();
-}
+
+
+
|