| 113 | // ---------------------------------------------------------------------------------------- |
| 114 | |
| 115 | const std::string convert_wstring_to_mbstring(const std::wstring &src) |
| 116 | { |
| 117 | std::mbstate_t st{}; |
| 118 | const wchar_t* p = src.c_str(); |
| 119 | |
| 120 | // Compute length |
| 121 | size_t n = std::wcsrtombs(nullptr, &p, 0, &st); |
| 122 | if (n == static_cast<std::size_t>(-1)) throw std::runtime_error("Invalid wide sequence / locale mismatch"); |
| 123 | |
| 124 | // Convert |
| 125 | std::string out(n, '\0'); |
| 126 | st = std::mbstate_t{}; |
| 127 | n = std::wcsrtombs(&out[0], &p, out.size(), &st); |
| 128 | if (n == static_cast<std::size_t>(-1)) throw std::runtime_error("Conversion failed"); |
| 129 | return out; |
| 130 | } |
| 131 | |
| 132 | // ---------------------------------------------------------------------------------------- |
| 133 |
no test coverage detected