fixed incorrect assert in file_win.cpp, added windows-unicode function for file_size
This commit is contained in:
parent
d3996ccfb9
commit
51052fa2b1
|
@ -211,7 +211,7 @@ namespace libtorrent
|
|||
size_type read(char* buffer, size_type num_bytes)
|
||||
{
|
||||
assert(buffer);
|
||||
assert(num_bytes > 0);
|
||||
assert(num_bytes >= 0);
|
||||
assert((DWORD)num_bytes == num_bytes);
|
||||
|
||||
DWORD bytes_read = 0;
|
||||
|
|
|
@ -2226,22 +2226,21 @@ namespace libtorrent
|
|||
m_statistics.received_bytes(0, received);
|
||||
if (m_recv_pos < m_packet_size) break;
|
||||
assert(m_recv_pos == m_packet_size);
|
||||
// ok, now we have got enough of the handshake. Is this connection
|
||||
// attached to a torrent?
|
||||
|
||||
// the use of this bit collides with Mainline
|
||||
// the new way of identifying support for the extensions
|
||||
// is in the peer_id
|
||||
// if ((m_recv_buffer[7] & 0x01) && m_ses.extensions_enabled())
|
||||
// m_supports_extensions = true;
|
||||
|
||||
// ok, now we have got enough of the handshake. Is this connection
|
||||
// attached to a torrent?
|
||||
if (m_torrent == 0)
|
||||
{
|
||||
|
||||
// now, we have to see if there's a torrent with the
|
||||
// info_hash we got from the peer
|
||||
sha1_hash info_hash;
|
||||
std::copy(m_recv_buffer.begin()+8, m_recv_buffer.begin() + 28, (char*)info_hash.begin());
|
||||
std::copy(m_recv_buffer.begin() + 8, m_recv_buffer.begin() + 28, (char*)info_hash.begin());
|
||||
|
||||
m_torrent = m_ses.find_torrent(info_hash);
|
||||
if (m_torrent && m_torrent->is_aborted()) m_torrent = 0;
|
||||
|
@ -2264,7 +2263,7 @@ namespace libtorrent
|
|||
throw protocol_error("connection rejected by paused torrent");
|
||||
}
|
||||
|
||||
// if the torrent's isn't ready to accept
|
||||
// if the torrent isn't ready to accept
|
||||
// connections yet, we'll have to wait with
|
||||
// our initialization
|
||||
if (m_torrent->ready_for_connections()) init();
|
||||
|
|
|
@ -126,8 +126,8 @@ namespace
|
|||
|
||||
bool exists_win( const path & ph )
|
||||
{
|
||||
std::wstring wsave_path(safe_convert(ph.string()));
|
||||
if(::GetFileAttributes( wsave_path.c_str() ) == 0xFFFFFFFF)
|
||||
std::wstring wpath(safe_convert(ph.string()));
|
||||
if(::GetFileAttributes( wpath.c_str() ) == 0xFFFFFFFF)
|
||||
{
|
||||
UINT err = ::GetLastError();
|
||||
if((err == ERROR_FILE_NOT_FOUND)
|
||||
|
@ -144,6 +144,25 @@ namespace
|
|||
return true;
|
||||
}
|
||||
|
||||
BOOST_FILESYSTEM_DECL boost::intmax_t file_size( const path & ph )
|
||||
{
|
||||
std::wstring wpath(safe_convert(ph.string()));
|
||||
// by now, intmax_t is 64-bits on all Windows compilers
|
||||
WIN32_FILE_ATTRIBUTE_DATA fad;
|
||||
if ( !::GetFileAttributesExW( wpath.c_str(),
|
||||
::GetFileExInfoStandard, &fad ) )
|
||||
boost::throw_exception( filesystem_error(
|
||||
"boost::filesystem::file_size",
|
||||
ph, fs::detail::system_error_code() ) );
|
||||
if ( (fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) !=0 )
|
||||
boost::throw_exception( filesystem_error(
|
||||
"boost::filesystem::file_size",
|
||||
ph, "invalid: is a directory",
|
||||
is_directory_error ) );
|
||||
return (static_cast<boost::intmax_t>(fad.nFileSizeHigh)
|
||||
<< (sizeof(fad.nFileSizeLow)*8))
|
||||
+ fad.nFileSizeLow;
|
||||
}
|
||||
|
||||
std::time_t last_write_time_win( const path & ph )
|
||||
{
|
||||
|
@ -341,10 +360,11 @@ namespace libtorrent
|
|||
try
|
||||
{
|
||||
path f = p / i->path;
|
||||
size = file_size(f);
|
||||
#if defined(_WIN32) && defined(UNICODE)
|
||||
size = file_size_win(f);
|
||||
time = last_write_time_win(f);
|
||||
#else
|
||||
size = file_size(f);
|
||||
time = last_write_time(f);
|
||||
#endif
|
||||
}
|
||||
|
@ -377,10 +397,11 @@ namespace libtorrent
|
|||
try
|
||||
{
|
||||
path f = p / i->path;
|
||||
size = file_size(f);
|
||||
#if defined(_WIN32) && defined(UNICODE)
|
||||
size = file_size_win(f);
|
||||
time = last_write_time_win(f);
|
||||
#else
|
||||
size = file_size(f);
|
||||
time = last_write_time(f);
|
||||
#endif
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue