Updated single_include to support mbstowcs_s Windows impl

This commit is contained in:
Pranav Srinivas Kumar
2023-02-15 07:11:53 -08:00
parent 11c60675d5
commit bfe95fee17

View File

@@ -1649,18 +1649,33 @@ static inline int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n) {
} }
// convert UTF-8 string to wstring // convert UTF-8 string to wstring
static inline std::wstring utf8_decode(const std::string &s) { #ifdef _MSC_VER
std::string curLocale = setlocale(LC_ALL, ""); static inline std::wstring utf8_decode(const std::string& s) {
const char *_Source = s.c_str(); std::string curLocale = setlocale(LC_ALL, "");
size_t _Dsize = mbstowcs(NULL, _Source, 0) + 1; const char* _Source = s.c_str();
wchar_t *_Dest = new wchar_t[_Dsize]; size_t _Dsize = std::strlen(_Source) + 1;
wmemset(_Dest, 0, _Dsize); wchar_t* _Dest = new wchar_t[_Dsize];
mbstowcs(_Dest, _Source, _Dsize); size_t _Osize;
std::wstring result = _Dest; mbstowcs_s(&_Osize, _Dest, _Dsize, _Source, _Dsize);
delete[] _Dest; std::wstring result = _Dest;
setlocale(LC_ALL, curLocale.c_str()); delete[] _Dest;
return result; setlocale(LC_ALL, curLocale.c_str());
return result;
} }
#else
static inline std::wstring utf8_decode(const std::string& s) {
std::string curLocale = setlocale(LC_ALL, "");
const char* _Source = s.c_str();
size_t _Dsize = mbstowcs(NULL, _Source, 0) + 1;
wchar_t* _Dest = new wchar_t[_Dsize];
wmemset(_Dest, 0, _Dsize);
mbstowcs(_Dest, _Source, _Dsize);
std::wstring result = _Dest;
delete[] _Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
#endif
} // namespace details } // namespace details