safer wxGetTranslation wrapper
authors_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
Wed, 17 Feb 2010 23:55:43 +0000 (23:55 +0000)
committers_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
Wed, 17 Feb 2010 23:55:43 +0000 (23:55 +0000)
serialize.h
util.cpp
util.h

index f3b9997..aaf3f99 100644 (file)
@@ -19,7 +19,7 @@ class CScript;
 class CDataStream;\r
 class CAutoFile;\r
 \r
-static const int VERSION = 202;\r
+static const int VERSION = 203;\r
 static const char* pszSubVer = ".0";\r
 \r
 \r
index 266c1dd..f4ce556 100644 (file)
--- a/util.cpp
+++ b/util.cpp
@@ -431,6 +431,35 @@ void ParseParameters(int argc, char* argv[])
 }\r
 \r
 \r
+const char* wxGetTranslation(const char* pszEnglish)\r
+{\r
+    // Wrapper of wxGetTranslation returning the same const char* type as was passed in\r
+    static CCriticalSection cs;\r
+    CRITICAL_BLOCK(cs)\r
+    {\r
+        // Look in cache\r
+        static map<string, char*> mapCache;\r
+        map<string, char*>::iterator mi = mapCache.find(pszEnglish);\r
+        if (mi != mapCache.end())\r
+            return (*mi).second;\r
+\r
+        // wxWidgets translation\r
+        const char* pszTranslated = wxGetTranslation(wxString(pszEnglish, wxConvUTF8)).utf8_str();\r
+        if (strcmp(pszEnglish, pszTranslated) == 0)\r
+            return pszEnglish;\r
+\r
+        // Add to cache, memory doesn't need to be freed\r
+        char* pszCached = new char[strlen(pszTranslated)+1];\r
+        strcpy(pszCached, pszTranslated);\r
+        mapCache[pszEnglish] = pszCached;\r
+        return pszCached;\r
+    }\r
+}\r
+\r
+\r
+\r
+\r
+\r
 \r
 \r
 \r
diff --git a/util.h b/util.h
index 188a9ec..8aed902 100644 (file)
--- a/util.h
+++ b/util.h
@@ -136,6 +136,7 @@ bool ParseMoney(const char* pszIn, int64& nRet);
 vector<unsigned char> ParseHex(const char* psz);\r
 vector<unsigned char> ParseHex(const std::string& str);\r
 void ParseParameters(int argc, char* argv[]);\r
+const char* wxGetTranslation(const char* psz);\r
 int GetFilesize(FILE* file);\r
 void GetDataDir(char* pszDirRet);\r
 string GetDataDir();\r
@@ -340,11 +341,9 @@ void skipspaces(T& it)
         ++it;\r
 }\r
 \r
-inline const char* wxGetTranslation(const char* psz)\r
-{\r
-    // Return translated UTF-8 const char*\r
-    return wxGetTranslation(wxString(psz, wxConvUTF8)).utf8_str();\r
-}\r
+\r
+\r
+\r
 \r
 \r
 \r