X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FBasics%2FBasics_Utils.cxx;h=1d8fd16e0f7f6091deb400f0e953f76d1539deeb;hb=7b6895b48ccd982f69db4fe3ecd30d75be0514dc;hp=cd18da5fa8b631cd754d49e961e9afa80fb2273c;hpb=2c3b0cf16d5069414bb63f3829a8ab0a2b7072db;p=modules%2Fkernel.git diff --git a/src/Basics/Basics_Utils.cxx b/src/Basics/Basics_Utils.cxx index cd18da5fa..1d8fd16e0 100644 --- a/src/Basics/Basics_Utils.cxx +++ b/src/Basics/Basics_Utils.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2021 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 @@ -83,13 +83,24 @@ namespace Kernel_Utils Localizer::Localizer() { - myCurLocale = setlocale(LC_NUMERIC, 0); - setlocale(LC_NUMERIC, "C"); + init(LC_NUMERIC, "C"); + } + + Localizer::Localizer(int category, const char* locale) + { + init(category, locale); + } + + void Localizer::init(int category, const char* locale) + { + myCategory = category; + myOriginalLocale = setlocale(category, NULL); + setlocale(category, locale); } Localizer::~Localizer() { - setlocale(LC_NUMERIC, myCurLocale.c_str()); + setlocale(myCategory, myOriginalLocale.c_str()); } std::string GetGUID( GUIDtype type ) @@ -108,7 +119,7 @@ namespace Kernel_Utils const wchar_t* decode(const char* encoded) { - setlocale(LC_ALL, ""); + Localizer loc(LC_CTYPE, ""); size_t length = strlen(encoded) + sizeof(char); wchar_t* decoded = new wchar_t[length]; memset( decoded, '\0', length); @@ -123,7 +134,7 @@ namespace Kernel_Utils const char* encode(const wchar_t* decoded) { - setlocale(LC_ALL, ""); + Localizer loc(LC_CTYPE, ""); size_t length = std::wcslen(decoded) + sizeof(wchar_t); char* encoded = new char[length]; memset( encoded, '\0', length); @@ -173,9 +184,9 @@ namespace Kernel_Utils char* utf8_encode(const wchar_t* encoded) { if (encoded == NULL) return NULL; - int size_needed = WideCharToMultiByte(CP_UTF8, 0, encoded, std::wcslen(encoded), NULL, 0, NULL, NULL); + auto size_needed = WideCharToMultiByte(CP_UTF8, 0, encoded, (int)std::wcslen(encoded), NULL, 0, NULL, NULL); char* strTo = new char[ size_needed + 1 ]; - WideCharToMultiByte(CP_UTF8, 0, encoded, std::wcslen(encoded), strTo, size_needed, NULL, NULL); + WideCharToMultiByte(CP_UTF8, 0, encoded, (int)std::wcslen(encoded), strTo, size_needed, NULL, NULL); strTo[size_needed] = '\0'; return strTo; } @@ -183,9 +194,9 @@ namespace Kernel_Utils wchar_t* utf8_decode(const char* decoded) { if (decoded == NULL) return NULL; - int size_needed = MultiByteToWideChar(CP_UTF8, 0, decoded, strlen(decoded), NULL, 0); + auto size_needed = MultiByteToWideChar(CP_UTF8, 0, decoded, (int)strlen(decoded), NULL, 0); wchar_t* wstrTo = new wchar_t[ size_needed + 1 ]; - MultiByteToWideChar(CP_UTF8, 0, decoded, strlen(decoded), wstrTo, size_needed); + MultiByteToWideChar(CP_UTF8, 0, decoded, (int)strlen(decoded), wstrTo, size_needed); wstrTo[size_needed] = '\0'; return wstrTo; }