Salome HOME
Merge Python 3 porting: additional chnages.
[modules/kernel.git] / src / Basics / Basics_Utils.cxx
index 673914693a56885af61f4391fd86d933f38fb7f4..97d6c0b5fbb247d508ded5b24980f8caebaa6e4f 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -35,6 +35,7 @@
 
 namespace Kernel_Utils
 {
+  // threadsafe
   std::string GetHostname()
   {
     int ls = 100, r = 1;
@@ -44,7 +45,7 @@ namespace Kernel_Utils
       {
         ls *= 2;
         s = new char[ls];
-        r = gethostname(s, ls-1);
+        r = gethostname(s, ls-1);//threadsafe see man 7 pthread
         switch (r) 
           {
           case 0:
@@ -105,6 +106,36 @@ namespace Kernel_Utils
     return guid;
   }
 
+  const wchar_t* decode(const char* encoded)
+  {
+    setlocale(LC_ALL, "");
+    size_t length = strlen(encoded) + sizeof(char);
+    wchar_t* decoded = new wchar_t[length];
+    memset( decoded, '\0', length);
+    mbstowcs(decoded, encoded, length);
+    return decoded;
+  }
+
+  const wchar_t* decode_s(std::string encoded)
+  {
+    return decode(encoded.c_str());
+  }
+
+  const char* encode(const wchar_t* decoded)
+  {
+    setlocale(LC_ALL, "");
+    size_t length = std::wcslen(decoded) + sizeof(wchar_t);
+    char* encoded = new char[length];
+    memset( encoded, '\0', length);
+    wcstombs(encoded, decoded, length);
+    return encoded;
+  }
+
+  std::string encode_s(const wchar_t* decoded)
+  {
+    return std::string(encode(decoded));
+  }
+
 #ifndef WIN32
   void print_traceback()
   {