mirror of
https://github.com/vimpunk/mio.git
synced 2025-12-06 08:46:51 +08:00
Merge pull request #68 from shivendra14/master
Adding support of UTF8 file name processing in mio on windows
This commit is contained in:
commit
3f86a95c07
@ -52,6 +52,16 @@ inline DWORD int64_low(int64_t n) noexcept
|
|||||||
return n & 0xffffffff;
|
return n & 0xffffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::wstring s_2_ws(const std::string& s)
|
||||||
|
{
|
||||||
|
if (s.empty())
|
||||||
|
return{};
|
||||||
|
const auto s_length = static_cast<int>(s.length());
|
||||||
|
auto buf = std::vector<wchar_t>(s_length);
|
||||||
|
const auto wide_char_count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), s_length, buf.data(), s_length);
|
||||||
|
return std::wstring(buf.data(), wide_char_count);
|
||||||
|
}
|
||||||
|
|
||||||
template<
|
template<
|
||||||
typename String,
|
typename String,
|
||||||
typename = typename std::enable_if<
|
typename = typename std::enable_if<
|
||||||
@ -59,7 +69,7 @@ template<
|
|||||||
>::type
|
>::type
|
||||||
> file_handle_type open_file_helper(const String& path, const access_mode mode)
|
> file_handle_type open_file_helper(const String& path, const access_mode mode)
|
||||||
{
|
{
|
||||||
return ::CreateFileA(c_str(path),
|
return ::CreateFileW(s_2_ws(path).c_str(),
|
||||||
mode == access_mode::read ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE,
|
mode == access_mode::read ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
0,
|
0,
|
||||||
|
|||||||
@ -794,6 +794,16 @@ inline DWORD int64_low(int64_t n) noexcept
|
|||||||
return n & 0xffffffff;
|
return n & 0xffffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::wstring s_2_ws(const std::string& s)
|
||||||
|
{
|
||||||
|
if (s.empty())
|
||||||
|
return{};
|
||||||
|
const auto s_length = static_cast<int>(s.length());
|
||||||
|
auto buf = std::vector<wchar_t>(s_length);
|
||||||
|
const auto wide_char_count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), s_length, buf.data(), s_length);
|
||||||
|
return std::wstring(buf.data(), wide_char_count);
|
||||||
|
}
|
||||||
|
|
||||||
template<
|
template<
|
||||||
typename String,
|
typename String,
|
||||||
typename = typename std::enable_if<
|
typename = typename std::enable_if<
|
||||||
@ -801,7 +811,7 @@ template<
|
|||||||
>::type
|
>::type
|
||||||
> file_handle_type open_file_helper(const String& path, const access_mode mode)
|
> file_handle_type open_file_helper(const String& path, const access_mode mode)
|
||||||
{
|
{
|
||||||
return ::CreateFileA(c_str(path),
|
return ::CreateFileW(s_2_ws(path).c_str(),
|
||||||
mode == access_mode::read ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE,
|
mode == access_mode::read ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
0,
|
0,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user