X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FBasics%2FBasics_Utils.cxx;h=97d6c0b5fbb247d508ded5b24980f8caebaa6e4f;hb=3e8cb819ece8ab264fe0c8d6d970387d2bfeb755;hp=673914693a56885af61f4391fd86d933f38fb7f4;hpb=991804e5e6def86ec8f17019e3dab9f3785431ba;p=modules%2Fkernel.git diff --git a/src/Basics/Basics_Utils.cxx b/src/Basics/Basics_Utils.cxx index 673914693..97d6c0b5f 100644 --- a/src/Basics/Basics_Utils.cxx +++ b/src/Basics/Basics_Utils.cxx @@ -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() {