| 51 | } |
| 52 | |
| 53 | mbpath_traits::internal_string_type |
| 54 | mbpath_traits::to_internal(const external_string_type& src) |
| 55 | { |
| 56 | std::size_t work_size(src.size() + 1); |
| 57 | boost::scoped_array< wchar_t > work(new wchar_t[work_size]); |
| 58 | std::mbstate_t state; |
| 59 | const external_string_type::value_type* from_next; |
| 60 | internal_string_type::value_type* to_next; |
| 61 | if (cvt->in( |
| 62 | state, src.c_str(), src.c_str() + src.size(), from_next, work.get(), |
| 63 | work.get() + work_size, to_next) != std::codecvt_base::ok) |
| 64 | boost::throw_exception< fs::basic_filesystem_error< mbpath > >( |
| 65 | fs::basic_filesystem_error< mbpath >( |
| 66 | "user::mbpath::to_internal conversion error", |
| 67 | boost::system::error_code(EINVAL, boost::system::errno_ecat))); |
| 68 | *to_next = L'\0'; |
| 69 | return internal_string_type(work.get()); |
| 70 | } |
| 71 | |
| 72 | void mbpath_traits::imbue(const std::locale& new_loc) |
| 73 | { |