forked from premiere/premiere-libtorrent
file_win.cpp fixes
This commit is contained in:
parent
845eee234f
commit
5f6f6ef9a3
|
@ -55,20 +55,32 @@ namespace
|
||||||
HLOCAL m_memory;
|
HLOCAL m_memory;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::string utf8_native(std::string const& s)
|
||||||
|
{
|
||||||
|
std::wstring ws;
|
||||||
|
libtorrent::utf8_wchar(s, ws);
|
||||||
|
std::size_t size = wcstombs(0, ws.c_str(), 0);
|
||||||
|
if (size == std::size_t(-1)) return s;
|
||||||
|
std::string ret(size + 1);
|
||||||
|
size = wcstombs(&ret[0], ws.c_str(), size + 1);
|
||||||
|
ret.resize(size - 1);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
void throw_exception(const char* thrower)
|
void throw_exception(const char* thrower)
|
||||||
{
|
{
|
||||||
int err = GetLastError();
|
DWORD err = GetLastError();
|
||||||
|
|
||||||
#ifdef UNICODE
|
#ifdef UNICODE
|
||||||
wchar_t *wbuffer = 0;
|
wchar_t *wbuffer = 0;
|
||||||
FormatMessage(
|
FormatMessage(
|
||||||
FORMAT_MESSAGE_FROM_SYSTEM
|
FORMAT_MESSAGE_FROM_SYSTEM
|
||||||
|FORMAT_MESSAGE_ALLOCATE_BUFFER
|
|FORMAT_MESSAGE_ALLOCATE_BUFFER
|
||||||
, 0, err, 0, (LPWCSTR)&wbuffer, 0, 0);
|
, 0, err, 0, (LPWSTR)&wbuffer, 0, 0);
|
||||||
auto_localfree auto_free(wbuffer);
|
auto_localfree auto_free(wbuffer);
|
||||||
std::string tmp_utf8;
|
std::string tmp_utf8;
|
||||||
wchar_utf8(wbuffer, tmp_utf8);
|
libtorrent::wchar_utf8(wbuffer, tmp_utf8);
|
||||||
char* buffer = tmp_utf8.c_str();
|
char const* buffer = tmp_utf8.c_str();
|
||||||
#else
|
#else
|
||||||
char* buffer = 0;
|
char* buffer = 0;
|
||||||
FormatMessage(
|
FormatMessage(
|
||||||
|
@ -133,7 +145,7 @@ namespace libtorrent
|
||||||
, 0);
|
, 0);
|
||||||
#else
|
#else
|
||||||
HANDLE new_handle = CreateFile(
|
HANDLE new_handle = CreateFile(
|
||||||
file_name
|
utf8_native(file_name).c_str()
|
||||||
, access_mask
|
, access_mask
|
||||||
, FILE_SHARE_READ
|
, FILE_SHARE_READ
|
||||||
, 0
|
, 0
|
||||||
|
|
Loading…
Reference in New Issue