forked from premiere/premiere-libtorrent
added error handling for set_piece_hashes
This commit is contained in:
parent
7e01b9d990
commit
cc432a8cd8
|
@ -45,6 +45,7 @@ release 0.14.3
|
||||||
changing DHT port
|
changing DHT port
|
||||||
* fixed move_storage bug when files were renamed to be moved out
|
* fixed move_storage bug when files were renamed to be moved out
|
||||||
of the root directory
|
of the root directory
|
||||||
|
* added error handling for set_piece_hashes
|
||||||
|
|
||||||
release 0.14.2
|
release 0.14.2
|
||||||
|
|
||||||
|
|
|
@ -93,9 +93,19 @@ set_piece_hashes()
|
||||||
void set_piece_hashes(create_torrent& t, boost::filesystem::path const& p, Fun f);
|
void set_piece_hashes(create_torrent& t, boost::filesystem::path const& p, Fun f);
|
||||||
template <class Fun>
|
template <class Fun>
|
||||||
void set_piece_hashes(create_torrent& t, boost::filesystem::wpath const& p, Fun f);
|
void set_piece_hashes(create_torrent& t, boost::filesystem::wpath const& p, Fun f);
|
||||||
|
template <class Fun>
|
||||||
|
void set_piece_hashes(create_torrent& t, boost::filesystem::path const& p, Fun f
|
||||||
|
, error_code& ec);
|
||||||
|
template <class Fun>
|
||||||
|
void set_piece_hashes(create_torrent& t, boost::filesystem::wpath const& p, Fun f
|
||||||
|
, error_code& ec);
|
||||||
|
|
||||||
void set_piece_hashes(create_torrent& t, boost::filesystem::path const& p);
|
void set_piece_hashes(create_torrent& t, boost::filesystem::path const& p);
|
||||||
void set_piece_hashes(create_torrent& t, boost::filesystem::wpath const& p);
|
void set_piece_hashes(create_torrent& t, boost::filesystem::wpath const& p);
|
||||||
|
void set_piece_hashes(create_torrent& t, boost::filesystem::path const& p
|
||||||
|
, error_code& ec);
|
||||||
|
void set_piece_hashes(create_torrent& t, boost::filesystem::wpath const& p
|
||||||
|
, error_code& ec);
|
||||||
|
|
||||||
This function will assume that the files added to the torrent file exists at path
|
This function will assume that the files added to the torrent file exists at path
|
||||||
``p``, read those files and hash the content and set the hashes in the ``create_torrent``
|
``p``, read those files and hash the content and set the hashes in the ``create_torrent``
|
||||||
|
@ -104,6 +114,9 @@ must have the following signature::
|
||||||
|
|
||||||
void Fun(int);
|
void Fun(int);
|
||||||
|
|
||||||
|
The overloads that don't take an ``error_code&`` may throw an exception in case of a
|
||||||
|
file error, the other overloads sets the error code to reflect the error, if any.
|
||||||
|
|
||||||
file_storage
|
file_storage
|
||||||
============
|
============
|
||||||
|
|
||||||
|
|
|
@ -224,7 +224,8 @@ namespace libtorrent
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class Fun>
|
template <class Fun>
|
||||||
void set_piece_hashes(create_torrent& t, boost::filesystem::path const& p, Fun f)
|
void set_piece_hashes(create_torrent& t, boost::filesystem::path const& p, Fun f
|
||||||
|
, error_code& ec)
|
||||||
{
|
{
|
||||||
file_pool fp;
|
file_pool fp;
|
||||||
boost::scoped_ptr<storage_interface> st(
|
boost::scoped_ptr<storage_interface> st(
|
||||||
|
@ -238,17 +239,39 @@ namespace libtorrent
|
||||||
// read hits the disk and will block. Progress should
|
// read hits the disk and will block. Progress should
|
||||||
// be updated in between reads
|
// be updated in between reads
|
||||||
st->read(buf.bytes(), i, 0, t.piece_size(i));
|
st->read(buf.bytes(), i, 0, t.piece_size(i));
|
||||||
|
if (st->error())
|
||||||
|
{
|
||||||
|
ec = st->error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
hasher h(buf.bytes(), t.piece_size(i));
|
hasher h(buf.bytes(), t.piece_size(i));
|
||||||
t.set_hash(i, h.final());
|
t.set_hash(i, h.final());
|
||||||
f(i);
|
f(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class Fun>
|
||||||
|
void set_piece_hashes(create_torrent& t, boost::filesystem::path const& p, Fun f)
|
||||||
|
{
|
||||||
|
error_code ec;
|
||||||
|
set_piece_hashes(t, p, f, ec);
|
||||||
|
if (ec) throw libtorrent_exception(ec);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef BOOST_NOEXCEPTIONS
|
||||||
inline void set_piece_hashes(create_torrent& t, boost::filesystem::path const& p)
|
inline void set_piece_hashes(create_torrent& t, boost::filesystem::path const& p)
|
||||||
{
|
{
|
||||||
set_piece_hashes(t, p, detail::nop);
|
error_code ec;
|
||||||
|
set_piece_hashes(t, p, detail::nop, ec);
|
||||||
|
if (ec) throw libtorrent_exception(ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void set_piece_hashes(create_torrent& t, boost::filesystem::path const& p, error_code& ec)
|
||||||
|
{
|
||||||
|
set_piece_hashes(t, p, detail::nop, ec);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// wpath versions
|
// wpath versions
|
||||||
|
|
||||||
template <class Pred>
|
template <class Pred>
|
||||||
|
@ -273,7 +296,8 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Fun>
|
template <class Fun>
|
||||||
void set_piece_hashes(create_torrent& t, boost::filesystem::wpath const& p, Fun f)
|
void set_piece_hashes(create_torrent& t, boost::filesystem::wpath const& p, Fun f
|
||||||
|
, error_code& ec)
|
||||||
{
|
{
|
||||||
file_pool fp;
|
file_pool fp;
|
||||||
std::string utf8;
|
std::string utf8;
|
||||||
|
@ -289,15 +313,37 @@ namespace libtorrent
|
||||||
// read hits the disk and will block. Progress should
|
// read hits the disk and will block. Progress should
|
||||||
// be updated in between reads
|
// be updated in between reads
|
||||||
st->read(&buf[0], i, 0, t.piece_size(i));
|
st->read(&buf[0], i, 0, t.piece_size(i));
|
||||||
|
if (st->error())
|
||||||
|
{
|
||||||
|
ec = st->error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
hasher h(&buf[0], t.piece_size(i));
|
hasher h(&buf[0], t.piece_size(i));
|
||||||
t.set_hash(i, h.final());
|
t.set_hash(i, h.final());
|
||||||
f(i);
|
f(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef BOOST_NOEXCEPTIONS
|
||||||
|
template <class Fun>
|
||||||
|
void set_piece_hashes(create_torrent& t, boost::filesystem::wpath const& p, Fun f)
|
||||||
|
{
|
||||||
|
error_code ec;
|
||||||
|
set_piece_hashes(t, p, f, ec);
|
||||||
|
if (ec) throw libtorrent_exception(ec);
|
||||||
|
}
|
||||||
|
|
||||||
inline void set_piece_hashes(create_torrent& t, boost::filesystem::wpath const& p)
|
inline void set_piece_hashes(create_torrent& t, boost::filesystem::wpath const& p)
|
||||||
{
|
{
|
||||||
set_piece_hashes(t, p, detail::nop);
|
error_code ec;
|
||||||
|
set_piece_hashes(t, p, detail::nop, ec);
|
||||||
|
if (ec) throw libtorrent_exception(ec);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
inline void set_piece_hashes(create_torrent& t, boost::filesystem::wpath const& p, error_code& ec)
|
||||||
|
{
|
||||||
|
set_piece_hashes(t, p, detail::nop, ec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue