diff --git a/src/core/curl_get.cc b/src/core/curl_get.cc index 1c0d4c3c..d1c60b3b 100644 --- a/src/core/curl_get.cc +++ b/src/core/curl_get.cc @@ -81,6 +81,7 @@ CurlGet::start() { curl_easy_setopt(m_handle, CURLOPT_NOSIGNAL, 1); curl_easy_setopt(m_handle, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(m_handle, CURLOPT_MAXREDIRS, 5); + curl_easy_setopt(m_handle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); m_stack->add_get(this); } diff --git a/src/core/manager.cc b/src/core/manager.cc index 1a054a62..11a19f16 100644 --- a/src/core/manager.cc +++ b/src/core/manager.cc @@ -488,7 +488,8 @@ Manager::try_create_download_expand(const std::string& uri, bool start, bool pri // hashing view and starts hashing if nessesary. void Manager::receive_hashing_changed() { - bool foundHashing = false; + bool foundHashing = std::find_if(m_hashingView->begin_visible(), m_hashingView->end_visible(), + std::mem_fun(&Download::is_hash_checking)) != m_hashingView->end_visible(); // Try quick hashing all those with hashing == initial, set them to // something else when failed. @@ -496,12 +497,7 @@ Manager::receive_hashing_changed() { if ((*itr)->is_hash_checked()) throw torrent::internal_error("core::Manager::receive_hashing_changed() (*itr)->is_hash_checked()."); - if ((*itr)->is_hash_checking()) { - foundHashing = true; - continue; - } - - if ((*itr)->is_hash_failed()) + if ((*itr)->is_hash_checking() || (*itr)->is_hash_failed()) continue; bool tryQuick = diff --git a/src/display/window_download_transfer_list.cc b/src/display/window_download_transfer_list.cc index 3430331e..81ec8b5e 100644 --- a/src/display/window_download_transfer_list.cc +++ b/src/display/window_download_transfer_list.cc @@ -78,6 +78,13 @@ WindowDownloadTransferList::redraw() { // Handle window size. for (torrent::BlockList::const_iterator bItr = (*itr)->begin(), bLast = (*itr)->end(); bItr != bLast; ++bItr) { + if (m_canvas->get_x() >= m_canvas->width() - 1) { + if (++y >= m_canvas->height()) + break; + + m_canvas->move(17, y); + } + char id; chtype attr = A_NORMAL; @@ -100,7 +107,7 @@ WindowDownloadTransferList::redraw() { attr |= A_UNDERLINE; m_canvas->print_char(attr | id); - } + } } } diff --git a/src/option_handler_rules.cc b/src/option_handler_rules.cc index 4150d5f0..a06ebd9b 100644 --- a/src/option_handler_rules.cc +++ b/src/option_handler_rules.cc @@ -320,7 +320,7 @@ apply_tos(const std::string& arg) { else if (arg == "mincost") value = torrent::ConnectionManager::iptos_mincost; - else if (!utils::Variable::string_to_value_unit_nothrow(arg.c_str(), &value, 16, 0)) + else if (!utils::Variable::string_to_value_unit_nothrow(arg.c_str(), &value, 16, 1)) throw torrent::input_error("Invalid TOS identifier."); cm->set_priority(value); diff --git a/src/utils/variable.cc b/src/utils/variable.cc index 158af345..6cc89222 100644 --- a/src/utils/variable.cc +++ b/src/utils/variable.cc @@ -66,6 +66,9 @@ Variable::set_d(core::Download* download, const torrent::Object& arg) { const char* Variable::string_to_value_unit(const char* pos, value_type* value, int base, int unit) { + if (unit <= 0) + throw torrent::input_error("Variable::string_to_value_unit(...) received unit <= 0."); + char* last; *value = strtoll(pos, &last, base);