| 25 | #include <cassert> |
| 26 | |
| 27 | static std::vector<char> convert(const char *source_enc, const char *target_enc, const void *source_data_ptr, size_t source_len, size_t max_dest_len) { |
| 28 | std::vector<char> buf(max_dest_len); |
| 29 | auto out_buf = buf.data(); |
| 30 | iconv_t converter = iconv_open(target_enc, source_enc); |
| 31 | auto char_ptr = static_cast<const char *>(source_data_ptr); |
| 32 | size_t res = iconv(converter, &char_ptr, &source_len, &out_buf, &max_dest_len); |
| 33 | iconv_close(converter); |
| 34 | |
| 35 | if (res == static_cast<size_t>(-1)) |
| 36 | return {}; |
| 37 | return buf; |
| 38 | } |
| 39 | |
| 40 | std::wstring to_wstring(std::string_view source) { |
| 41 | auto bytes = convert("CHAR", "UCS-2LE//IGNORE", source.data(), source.length(), sizeof(wchar_t) * (source.length() + 1)); |
no test coverage detected