// OpenVPN -- An application to securely tunnel IP networks // over a single port, with support for SSL/TLS-based // session authentication and key exchange, // packet encryption, packet authentication, and // packet compression. // // Copyright (C) 2012-2017 OpenVPN Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License Version 3 // as published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program in the COPYING file. // If not, see . #ifndef OPENVPN_COMMON_WSTRING_H #define OPENVPN_COMMON_WSTRING_H #include #include #include #include #include namespace openvpn { namespace wstring { inline std::wstring from_utf8(const std::string& str) { typedef std::codecvt_utf8 cvt_type; std::wstring_convert cvt; return cvt.from_bytes(str); } inline std::string to_utf8(const std::wstring& wstr) { typedef std::codecvt_utf8 cvt_type; std::wstring_convert cvt; return cvt.to_bytes(wstr); } inline std::unique_ptr to_wchar_t(const std::wstring& wstr) { const size_t len = wstr.length(); std::unique_ptr ret(new wchar_t[len+1]); size_t i; for (i = 0; i < len; ++i) ret[i] = wstr[i]; ret[i] = L'\0'; return ret; } // return value corresponds to the MULTI_SZ string format on Windows inline std::wstring pack_string_vector(const std::vector& strvec) { std::wstring ret; for (auto &s : strvec) { ret += from_utf8(s); ret += L'\0'; } return ret; } } } #endif